@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());
}
}
for (JobExecutionContext currentlyExecutingJob : scheduler.getCurrentlyExecutingJobs()) {
if (InterruptableJob.class.isAssignableFrom(currentlyExecutingJob.getJobDetail().getJobClass())) // Otherwise it will throw an exception
scheduler.interrupt(currentlyExecutingJob.getFireInstanceId());
}
6条答案
按热度按时间zy1mlcev1#
您需要将作业编写为InterruptableJob的实现。
请查看@ javadoc上面的类,quartz发行版也包含一个例子(example 7)。
hfsqlsce2#
在Quartz 2.1 with Spring中,您可以:
mrphzbgm3#
在我看来,最好的解决方案是在这个线程中描述的:http://forums.terracotta.org/forums/posts/list/7700.page
我刚刚引入了一个“sleep”,在设置stop标志为true之后,让作业干净地完成。
ffdz8vbo4#
我不知道为什么没有人提到这一点,或者在提出问题的时候没有这一点。
Scheduler示例有一个名为shutdown的方法。
以上是用来开始一个工作一样
使用标志或其他东西来知道何时停止作业运行。然后使用
我如何实现我的要求:
其中jobDetail和simpleTrigger是自解释的。
希望有帮助:)
iecba09b5#
回答这个问题可能有点晚,但可能会有所帮助:
如果不再需要某个作业,可以使用
此方法将仅中断/停止由调度程序内的作业键和组唯一标识的作业,该作业可能有许多其他作业正在运行。
另一方面,如果您想完全关闭调度程序和其中的所有作业,您可以这样做
This是一个很好的例子,它展示了不同的工作相关任务。
y1aodyip6#
中断所有正在运行的作业
您可以在
JobExecutionContext
中获取作业信息,检索Job类或类似的东西。