Quartz - 基于作业变量的关闭调度程序

时间:2017-04-04 13:52:53

标签: java quartz-scheduler

我正在使用Quartz来安排Java作业。 调度程序无限重复。 如果Job.class中发生某个异常,我需要关闭调度程序。 如何让Job通知调度类shutdown()?

谢谢, RayK

1 个答案:

答案 0 :(得分:1)

Quartz的工作是通过调用他们的execute(JobExecutionContext)方法来运行的。此JobExecutionContext对象使用getScheduler()方法访问正在运行您作业的Scheduler

所以你可以这么做:

class YourJob implements Job {
    //...
    @Override
    public void execute(final JobExecutionContext context) throws JobExecutionException {
        //...
        if (someCondition) {
            try {
                context.getScheduler().shutdown();
            } catch (SchedulerException e) {
                // log or rethrow!
            }
        }
        //...

但是,我不确定在运行工作的过程中关闭调度程序是个好主意。你为什么要那样做?如果您要做的就是停止某项工作再次运行,那么只需unschedule就可以了:

  

取消安排工作的特定触发器:

// Unschedule a particular trigger from the job (a job may have more than one trigger)
scheduler.unscheduleJob(triggerKey("trigger1", "group1"));
     

删除作业并取消调度其所有触发器

scheduler.deleteJob(jobKey("job1", "group1"));