[英]Liferay - Scheduling a job at the time set by user from portal
我正在使用Liferay 6.2 CE GA4。 我一直在嘗試在Portlet的控制器中安排方法的執行。
我碰到很多教程,其中大部分教程提供的情況下,我們可以提供的Liferay-portlet.xml中的時候,像這個教程 。 但是我想讓用戶在門戶中配置時間。 這樣就有可能獲得時間並在我的constroller中實現一個簡單的調度工作。
編輯:我有一個像下面這樣的控制器,它可以完成調度工作。
public class MyController {
@RenderMapping
public String defaultView() {
String cron = "0 0/1 * 1/1 * ? *";
Date dt = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(dt);
calendar.add(Calendar.MINUTE, 2);
Trigger trigger = null;
try {
trigger = TriggerFactoryUtil.buildTrigger(TriggerType.CRON, Scheduler.class.getName(), Scheduler.class.getName(), calendar.getTime(), calendar.getTime(), cron);
} catch (SchedulerException e) {
e.printStackTrace();
}
Portlet portlet = PortletLocalServiceUtil.getPortletById("portlet_id");
Message message = new Message();
message.put("CONTEXT_PATH", portlet.getContextPath());
message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, Scheduler.class.getName());
message.put(SchedulerEngine.PORTLET_ID, portlet.getPortletId());
Scheduler scheduler = new Scheduler();
MessageBusUtil.registerMessageListener(DestinationNames.SCHEDULER_DISPATCH, scheduler);
try {
SchedulerEngineHelperUtil.schedule( trigger, StorageType.PERSISTED, "", DestinationNames.SCHEDULER_DISPATCH, message, 5);
} catch (SchedulerException e) {
e.printStackTrace();
}
return "view";
}
}
上面的Scheduler
類定義如下。
public class Scheduler implements MessageListener {
@Override
public void receive(Message message) throws MessageListenerException {
myMethodAtScheduledTime();
}
public void myMethodAtScheduledTime() {
System.out.println("Invoked at " + new Date());
}
}
每10或20秒調用一次myMethodAtScheduledTime
方法。 如何將通話限制為一次。 即恰好在日歷實例時間+ 2分鍾( calendar.add(Calendar.MINUTE, 2);
)
調度程序可以動態創建。
MessageListener
一個只有一個receive(Message)
方法的接口。 SchedulerEngineHelperUtil#schedule
方法注冊可配置的觸發器。 觸發器將消息偵聽器類和調用時間作為參數(以及其他參數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.