【问题标题】:Scheduled Tasks in Liferay with AutowiredLiferay 中的计划任务与 Autowired
【发布时间】:2015-07-14 12:59:22
【问题描述】:

我正在尝试在 liferay portlet 中创建计划任务。

Liferay:6.2

春季: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");
    }

方法正在触发。但服务组件为空。通常其他部分的服务运行良好。

我已尝试找到解决方案,但可能缺少某些设置。 谢谢,

【问题讨论】:

    标签: spring liferay scheduled-tasks autowired


    【解决方案1】:

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

    但如果您的服务是在门户应用程序上下文中定义的,您可以改用PortalBeanLocatorUtil.locate。

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 1970-01-01
      • 2016-02-10
      • 2010-09-28
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2016-07-13
      相关资源
      最近更新 更多