我想知道如何在liferay中做一件事。例如,我有一个portlet,用户可以在其中设置任务的调度(例如,每周做一次,或者在预定时间做一次)。我找到了这个tutorial,但我希望每次用户在portlet中更改其首选项时都配置触发器。换句话说,我想直接从我的控制器配置触发器,而不是从xml配置。有人能告诉我怎么做吗?
答案 0 :(得分:1)
以下代码创建计划任务。
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>