Liferay中使用自动装配的预定任务

时间:2015-07-14 12:59:22

标签: spring liferay scheduled-tasks 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>

和相应的类

@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");
    }

该方法正在解雇。但服务组件为null。通常情况下,其他部分的服务运作良好。

我试图找到解决方案,但可能缺少一些设置。 感谢名单,

1 个答案:

答案 0 :(得分:2)

MessageListener不是由Spring实例化的,而是由Liferay实现的(参见QuartzSchedulerEngine.getMessageListener(String, ClassLoader)的实现)。而Liferay只是实例化了这个类。因此,您无法将任何内容自动装配到liferay-portlet.xml

中定义的MessageListener中

但是,如果您的服务是在门户网站应用程序上下文中定义的,那么您可以使用PortalBeanLocatorUtil.locate