[英]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.