[英]How to stop or pause a scheduled job in Liferay 6.1
我有一個Portlet可以啟動預定的工作 。 但是當我嘗試暫停或停止它時,作業將繼續執行。 我不知道在創建計划作業時還是在嘗試停止/暫停它時是否做錯了什么。
這是我啟動工作的方式:
CronTrigger trigger = new CronTrigger("job1", "group1", "0 0/1 * 1/1 * ? *");
SimpleJob job = new SimpleJob();
MessageBusUtil.registerMessageListener(DestinationNames.SCHEDULER_DISPATCH, job);
Message message = new Message();
message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, SimpleJob.class.getName());
SchedulerEngineUtil.schedule(trigger, StorageType.PERSISTED,
"Scheduled Job", DestinationNames.SCHEDULER_DISPATCH, message, 0);
這是工作:
public class SimpleJob implements MessageListener {
private static Log log = LogFactoryUtil.getLog(SimpleJob.class);
@Override
public void receive(Message message) throws MessageListenerException {
log.debug(" ... SimpleJob executed ... ");
}
}
這是試圖停止的功能:
public void stopCron(ActionRequest request, ActionResponse response)throws Exception{
SimpleJob job = new SimpleJob();
MessageBusUtil.unregisterMessageListener(DestinationNames.SCHEDULER_DISPATCH, job);
SchedulerEngineUtil.pause("job1", "group1", StorageType.PERSISTED);
SchedulerEngineUtil.delete("job1", "group1", StorageType.PERSISTED);
SchedulerEngineUtil.unschedule("job1", "group1", StorageType.PERSISTED);
}
如何停止工作?
首先:您正在注銷錯誤的工作實例:
SimpleJob job = new SimpleJob();
MessageBusUtil.unregisterMessageListener(DestinationNames.SCHEDULER_DISPATCH, job);
給定的工作不是您已注冊的實例
MessageBusUtil.registerMessageListener(DestinationNames.SCHEDULER_DISPATCH, job);
結果, unregisterMessageListener
將不執行任何操作。
第二:您根本不需要注冊任何消息偵聽器。 使用消息中的MESSAGE_LISTENER_CLASS_NAME
屬性,在SchedulerEngineHelperUtil.schedule()
已經為您注冊了一個。 但是要正確使用它,您還必須定義portlet或Web上下文的ID:
String simpleJobClass = SimpleJob.class.getName();
message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, simpleJobClass);
message.put(SchedulerEngine.PORTLET_ID, "my-web-context or my-portlet-id");
message.put(SchedulerEngine.DESTINATION_NAME, DestinationNames.SCHEDULER_DISPATCH);
現在應該可以如示例中所示暫停/取消您的工作:
SchedulerEngineUtil.delete("job1", "group1", StorageType.PERSISTED);
順便說一句: MessageBusUtil.registerMessageListener(DestinationNames.SCHEDULER_DISPATCH, job)
將為所有計划的觸發器注冊您的作業,因為它們都使用SCHEDULER_DISPATCH
作為目的地名稱。
首先感謝您的回答! 我用您的代碼嘗試了此操作,沒有注冊消息偵聽器,並且該作業沒有觸發。 但是,使用MessageBusUtil.registerMessageListener可以啟動作業,但是使用
SchedulerEngineUtil.pause("work1", "grupo1", StorageType.PERSISTED);
工作不會停止。
發射代碼:
String cron = "0 0/1 * 1/1 * ? *";
CronTrigger trigger = null;
trigger = new CronTrigger("work1", "grupo1", cron);
SimpleJob job = new SimpleJob();
Message message = new Message();
message.put(SchedulerEngine.MESSAGE_LISTENER_CLASS_NAME, SimpleJob.class);
message.put(SchedulerEngine.PORTLET_ID, td.getPortletDisplay().getId());
message.put(SchedulerEngine.DESTINATION_NAME, DestinationNames.SCHEDULER_DISPATCH);
MessageBusUtil.registerMessageListener(DestinationNames.SCHEDULER_DISPATCH, job);
SchedulerEngineUtil.schedule(trigger, StorageType.PERSISTED, "Scheduled Job", DestinationNames.SCHEDULER_DISPATCH, message, 0);
並停止其他功能:
SchedulerEngineUtil.delete("work1", "grupo1", StorageType.PERSISTED);
問候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.