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