繁体   English   中英

如何使用spring任务停止计划的作业

[英]How to stop jobs scheduled using spring task

我已经使用applicationContext实现了一个示例spring计划任务,如下所示,

<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="cron" method="show" cron="0/10 * * * * ?"/>
    <task:scheduled ref="cron" method="show2" cron="0/15 * * * * ?"/>
</task:scheduled-tasks>

<task:scheduler id="myScheduler" pool-size="10"/>

如何停止此计划方法?

ThreadPoolTaskScheduler注入另一个bean,并调用shutdown() 如果这是不可接受的,您可以将cron bean配置为接受标志。 例如:

public class Job() {
    private final AtomicBoolean stop = new AtomicBoolean(false);

    public void show() {
        if (stop.get()) {
            return;
        }
        ...
    }

    public void stop() {
        stop.set(true);
    }
}

请注意,这不会从调度程序中删除作业。 防止这种情况的唯一方法是获取对ScheduledFuture的引用并调用cancel()

取决于你的意思“停止”。

  1. 业务条件停止:由于业务条件而停止 ,您应该在方法中评估这些条件,而不是仅执行代码。 这样,您可以在运行时停止不需要的执行,运行逻辑以处理条件失败(记录,通知等)。

  2. 非业务条件:将chron表达式外部化为属性文件,或者我更喜欢JVM中的系统变量。 然后,您只需将属性值更改为9999方案即可停止执行。

系统变量示例。

<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="cron" method="show" cron="#{systemProperties['chron1']}"/>
<task:scheduled ref="cron" method="show2" cron="#{systemProperties['chron2']}"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM