【发布时间】:2016-05-13 16:30:06
【问题描述】:
我想知道如何在 liferay 中做一件事。例如,我有一个 portlet,用户可以在其中设置任务的调度(例如每周做某事,或者在预定的时间做一次)。我找到了这个tutorial,但我想在每次用户在portlet 中更改他的首选项时配置触发器。换句话说,我想直接从我的控制器配置触发器,而不是从 xml 配置。谁能告诉我该怎么做?
【问题讨论】:
我想知道如何在 liferay 中做一件事。例如,我有一个 portlet,用户可以在其中设置任务的调度(例如每周做某事,或者在预定的时间做一次)。我找到了这个tutorial,但我想在每次用户在portlet 中更改他的首选项时配置触发器。换句话说,我想直接从我的控制器配置触发器,而不是从 xml 配置。谁能告诉我该怎么做?
【问题讨论】:
以下代码创建一个计划任务。
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);
引用的 MyListener 必须实现 com.liferay.portal.kernel.messaging.MessageListener 并且会被自动调用。
创建“静态”计划的另一个选项是将计划程序添加到 liferay-portlet.xml。
<scheduler-entry>
<scheduler-event-listener-class>de.test.MyListener</scheduler-event-listener-class>
<trigger>
<simple>
<simple-trigger-value>20</simple-trigger-value>
<time-unit>minute</time-unit>
</simple>
</trigger>
</scheduler-entry>
以上每 20 分钟触发一次。作为替代方案,您可以使用 cron 触发器。顾名思义,这使用 cron 语法,(参见http://www.cronmaker.com/):
<trigger>
<cron>
<cron-trigger-value>0 0 6 ? * MON *</cron-trigger-value>
</cron>
</trigger>
【讨论】: