Liferay中的动态调度程序

时间:2013-11-15 10:55:13

标签: cron liferay liferay-6 scheduler

我需要在Liferay中定期执行任务,我发现您可以创建一个实现MessageListener的类,并且在receive方法中您可以实现该操作。直到这里它很好,但在此之后编程你需要在liferay-portlet.xml中执行它的时间,如果使用xml文件我无法动态编辑持续时间。

有没有什么方法可以创建一个可以编程的任务来动态地从DB获取调度持续时间的值?

我相信SchedulerEngineUtil我必须能够做到这一点,但我不知道这是正确的方式还是如何做到的?

有谁知道如何找到任何文档和一些示例?

提前致谢

3 个答案:

答案 0 :(得分:0)

确实,要定期执行任务,您必须实现MessageListener并在liferay-portlet.xml中执行以下操作 -

<scheduler-entry> <scheduler-event-listener-class>com.#className</scheduler-event-listener-class> <trigger> <simple> <simple-trigger-value>1</simple-trigger-value> <time-unit>minute</time-unit> </simple> </trigger> </scheduler-entry>

这将每1分钟触发一次事件监听器类。所以尝试使用这里的Util方法从DB中获取数据。 如果有帮助,请告诉我。

答案 1 :(得分:0)

要添加动态调度程序,您必须实现MessageListener并使用SchedulerEngineHelperUtil注册它:

String pId = "portlet id here";  // TODO put portlet ID here

Message msg = new Message();
msg.put(SchedulerEngine.PORTLET_ID, pId);
msg.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, MyListener.class.getName());

Trigger listener = new IntervalTrigger(MyListener.class.getName(), MyListener.class.getName(), 50);
SchedulerEngineHelperUtil.schedule(
    listener, StorageType.PERSISTED, "some description",
    DestinationNames.SCHEDULER_DISPATCH, msg, 0);

您可能还想阅读my answer also covering a solution for creating a static scheduled-task

答案 2 :(得分:0)

时间在cronText中设置,其中12是分钟,10是小时。目前这个cronText每天上午10:12安排它。

String portletId = "yourportlet_WAR_yourportlet";
String cronText = "0 12 10 1/1 * ? *";

Message message = new Message();
message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, YourListenerClass.class.getName());
message.put(SchedulerEngine.PORTLET_ID, portletId);
message.put("portletId", portletId);

SchedulerEngineHelperUtil.schedule(
    new CronTrigger("jobName", "jobGroup", cronText),
    StorageType.PERSISTED,
    "Message Scheduler Description",
    DestinationNames.SCHEDULER_DISPATCH,
    message,
    0);