Liferay 中使用 Autowired 的计划任务
Scheduled Tasks in Liferay with Autowired
我正在尝试在 liferay portlet 中创建计划任务。
Liferay:6.2
Spring: 3.1.4.RELEASE
有
<scheduler-entry>
<scheduler-description>test-scheduler</scheduler-description>
<scheduler-event-listener-class>
project.ScheduledProcesser
</scheduler-event-listener-class>
<trigger>
<simple>
<simple-trigger-value>
1
</simple-trigger-value>
<time-unit>minute</time-unit>
</simple>
</trigger>
</scheduler-entry>
和相应的class
@Component
public class ScheduledProcesser implements MessageListener {
private static Log log = LogFactoryUtil
.getLog(ScheduledProcesser.class);
@Autowired
@Qualifier("myRequestService")
private RequestService service;
@Override
public void receive(Message message) throws MessageListenerException {
log.info("Starting");
Request req = service.get("AAA746");
if (req!=null)
log.info("REQ -" + req.getId());
log.info("Finished");
}
方法正在触发。但是服务组件是空的。通常是其他部分的服务运作良好。
我已尝试找到解决方案,但可能缺少某些设置。
谢谢,
MessageListener
不是由 Spring 实例化的,而是由 Liferay 实例化的(参见 QuartzSchedulerEngine.getMessageListener(String, ClassLoader)
的实现)。 Liferay 只是实例化 class。因此,您不能将任何内容自动装配到 liferay-portlet.xml
.
中定义的 MessageListener
但是如果您的服务是在门户应用程序上下文中定义的,您可以使用 PortalBeanLocatorUtil.locate
。
我正在尝试在 liferay portlet 中创建计划任务。
Liferay:6.2
Spring: 3.1.4.RELEASE
有
<scheduler-entry>
<scheduler-description>test-scheduler</scheduler-description>
<scheduler-event-listener-class>
project.ScheduledProcesser
</scheduler-event-listener-class>
<trigger>
<simple>
<simple-trigger-value>
1
</simple-trigger-value>
<time-unit>minute</time-unit>
</simple>
</trigger>
</scheduler-entry>
和相应的class
@Component
public class ScheduledProcesser implements MessageListener {
private static Log log = LogFactoryUtil
.getLog(ScheduledProcesser.class);
@Autowired
@Qualifier("myRequestService")
private RequestService service;
@Override
public void receive(Message message) throws MessageListenerException {
log.info("Starting");
Request req = service.get("AAA746");
if (req!=null)
log.info("REQ -" + req.getId());
log.info("Finished");
}
方法正在触发。但是服务组件是空的。通常是其他部分的服务运作良好。
我已尝试找到解决方案,但可能缺少某些设置。 谢谢,
MessageListener
不是由 Spring 实例化的,而是由 Liferay 实例化的(参见 QuartzSchedulerEngine.getMessageListener(String, ClassLoader)
的实现)。 Liferay 只是实例化 class。因此,您不能将任何内容自动装配到 liferay-portlet.xml
.
但是如果您的服务是在门户应用程序上下文中定义的,您可以使用 PortalBeanLocatorUtil.locate
。