首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何中断或停止当前正在运行的quartz作业?

如何中断或停止当前正在运行的quartz作业?
EN

Stack Overflow用户
提问于 2011-08-23 17:45:39
回答 6查看 62.3K关注 0票数 22

我有一些任务是在Java Quartz Jobs的帮助下执行的,但我需要根据代码中的某些条件停止一些任务。我读到这可以通过InterruptableJob来完成。但是我不明白我应该用什么方式去做?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-08-23 18:36:53

您需要编写一个您的作业作为InterruptableJob的实现。要中断此作业,您需要处理Scheduler,并调用interrupt(jobKey<<job name & job group>>)

请看@ javadoc上的类,quartz发行版也包含了一个例子(example7)。

票数 36
EN

Stack Overflow用户

发布于 2013-06-25 22:01:34

在Quartz 2.1 with Spring中,您可以:

代码语言:javascript
复制
@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());
    }
}
票数 5
EN

Stack Overflow用户

发布于 2014-11-02 18:36:04

在我看来,最好的解决方案是这个帖子中描述的:http://forums.terracotta.org/forums/posts/list/7700.page

我刚刚在将stop flag设置为true之后引入了一个“睡眠”,以允许作业干净利落地完成。

代码语言:javascript
复制
    @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();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7159080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档