如何中断或停止当前运行的石英作业?

bre*_*ish 19 java schedule scheduled-tasks quartz-scheduler

我有一些在Java Quartz Jobs的帮助下执行的任务,但我需要在代码中通过某些条件来停止某些任务.我读到这可以通过InterruptableJob完成.但我不明白我该怎么做呢?

blo*_*lob 34

你需要写一份你的工作作为InterruptableJob的实现.要中断此作业,您需要处理调度程序,然后调用interrupt(jobKey<<job name & job group>>)

请看看@ javadoc上面的类,石英发行版也包含一个例子(例子7).

  • 这种方法的局限性是**不**集群感知。Java 文档:*此方法不支持集群。也就是说,它只会中断当前在这个 Scheduler 实例中执行的已识别 InterruptableJob 的实例,而不是整个集群。 * (2认同)

fl4*_*l4l 5

在带有 Spring 的 Quartz 2.1 中,您可以:

@Autowired
private Scheduler schedulerFactoryBean; //injected by spring
...
...

List<JobExecutionContext> currentlyExecuting = schedulerFactoryBean.getCurrentlyExecutingJobs();

//verifying if job is running       
for (JobExecutionContext jobExecutionContext : currentlyExecuting) {
    if(jobExecutionContext.getJobDetail().getKey().getName().equals("JobKeyNameToInterrupt")){
        result = schedulerFactoryBean.interrupt(jobExecutionContext.getJobDetail().getKey());
    }
}
Run Code Online (Sandbox Code Playgroud)