我有一些任务是在Java Quartz Jobs的帮助下执行的,但我需要根据代码中的某些条件停止一些任务。我读到这可以通过InterruptableJob来完成。但是我不明白我应该用什么方式去做?
发布于 2011-08-23 18:36:53
您需要编写一个您的作业作为InterruptableJob的实现。要中断此作业,您需要处理Scheduler,并调用interrupt(jobKey<<job name & job group>>)
请看@ javadoc上的类,quartz发行版也包含了一个例子(example7)。
发布于 2013-06-25 22:01:34
在Quartz 2.1 with Spring中,您可以:
@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());
}
}
发布于 2014-11-02 18:36:04
在我看来,最好的解决方案是这个帖子中描述的:http://forums.terracotta.org/forums/posts/list/7700.page
我刚刚在将stop flag设置为true之后引入了一个“睡眠”,以允许作业干净利落地完成。
@Override
public void interrupt() throws UnableToInterruptJobException {
stopFlag.set(true);
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
//logger.error("interrupt()", e);
}
Thread thread = runningThread.getAndSet(null);
if (thread != null)
thread.interrupt();
}
https://stackoverflow.com/questions/7159080
复制相似问题