2

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

有什么方法可以创建一个可以编程为从数据库动态获取调度持续时间的值的任务?

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

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

提前致谢

4

3 回答 3

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 获取数据。让我知道这是否有帮助。

于 2013-11-18T07:12:56.757 回答
0

要添加动态调度程序,您必须实现 aMessageListener并使用以下方法注册它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);

您可能还想阅读我的回答,其中还包括创建静态计划任务的解决方案

于 2016-02-17T11:31:06.867 回答
0

The time is set in cronText, where 12 is minutes and 10 is hours. Currently this cronText makes it schedule every day at 10:12 am.

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);
于 2016-03-31T14:13:07.863 回答