我需要在Liferay中定期执行任务,我发现您可以创建一个实现MessageListener
的类,并且在receive
方法中您可以实现该操作。直到这里它很好,但在此之后编程你需要在liferay-portlet.xml
中执行它的时间,如果使用xml文件我无法动态编辑持续时间。
有没有什么方法可以创建一个可以编程的任务来动态地从DB获取调度持续时间的值?
我相信SchedulerEngineUtil
我必须能够做到这一点,但我不知道这是正确的方式还是如何做到的?
有谁知道如何找到任何文档和一些示例?
提前致谢
答案 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);