quartz schedule中pauseJob和pauseTrigger之间的区别?

时间:2015-01-07 15:46:32

标签: java quartz-scheduler

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();
            }

1 个答案:

答案 0 :(得分:8)

您可能已经注意到,在Quartz中,单个作业可以与多个触发器相关联。如果你查看Quartz源代码,你会发现pauseJob方法只是检索与指定作业相关的所有触发器并暂停它们,而pauseTrigger方法只暂停一个特定的触发器。这就是主要区别。

请注意,在Quartz中暂停作业不会暂停当前正在运行的正在运行的作业,它只会阻止作业在将来运行!

如果要中断正在运行的作业,则可以使用作业必须实现的org.quartz.Interruptable接口中定义的interruptJob方法。如果您的作业实现了此接口,则完全取决于您实现中断逻辑。例如,你可以在调用interruptJob方法时设置某种标志,然后你需要在job的execute方法中检查这个标志的值。