quartz scheduler中pauseJob()和pauseTrigger()有什么区别? 如何选择其中一个使用?现在我想暂停/干预一个特定的工作我该怎么办
我的调度程序代码如下所示
JobDetail job = new JobDetail();
job.setName("pollerjob"+pollerId);
job.setJobClass(Pollersheduller.class);
job.getJobDataMap().put("socialMediaObj", socialMediaObj);
job.getJobDataMap().put("queue", queue);
//configure the scheduler time
SimpleTrigger trigger = new SimpleTrigger();
trigger.setName("pollerSocial"+pollerId);
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
trigger.setRepeatInterval(Long.parseLong(intervel));
//schedule it
Scheduler scheduler = null;
try {
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:8)
您可能已经注意到,在Quartz中,单个作业可以与多个触发器相关联。如果你查看Quartz源代码,你会发现pauseJob方法只是检索与指定作业相关的所有触发器并暂停它们,而pauseTrigger方法只暂停一个特定的触发器。这就是主要区别。
请注意,在Quartz中暂停作业不会暂停当前正在运行的正在运行的作业,它只会阻止作业在将来运行!
如果要中断正在运行的作业,则可以使用作业必须实现的org.quartz.Interruptable接口中定义的interruptJob方法。如果您的作业实现了此接口,则完全取决于您实现中断逻辑。例如,你可以在调用interruptJob方法时设置某种标志,然后你需要在job的execute方法中检查这个标志的值。