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

问题描述 投票:19回答:5

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

java scheduled-tasks quartz-scheduler schedule
5个回答
34
投票

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

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


4
投票

在使用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());
    }
}

1
投票

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

我刚刚将stop stop标志设置为true后引入了“sleep”,以使作业干净利落。

    @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();
}

0
投票

我不知道为什么没有人提到这一点,或者在问到这个问题时可能没有这个。

Scheduler实例有一个名为shutdown的方法。

 SchedulerFactory factory = new StdSchedulerFactor();
 Scheduler scheduler = factory.getScheduler();

以上用于开始像这样的工作

 scheduler.start();

使用标志或其他东西知道何时停止作业运行。然后用

 scheduler.shutdown();

我如何实现我的要求:

if(flag==true)
    {
        scheduler.start();
        scheduler.scheduleJob(jobDetail, simpleTrigger);
    }
    else if(flag==false)
    {
        scheduler.shutdown();
    }

其中jobDetail和simpleTrigger是自解释的。

希望能帮助到你。 :)


0
投票

回答这个问题可能有点晚了,但可能会有所帮助:

如果您不再需要某个作业,则可以使用删除该特定作业

scheduler.deleteJob(jobKey(<JobKey>, <JobGroup>));

此方法仅中断/停止由调度程序中的作业键和组唯一标识的作业,该作业可能有许多其他作业正在运行。

另一方面,如果要完全关闭调度程序以及其中的所有作业,则可以执行此操作

scheduler.shutdown();

This是不同工作相关任务的一个很好的例子。

© www.soinside.com 2019 - 2024. All rights reserved.