Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何停止使用spring任务计划的作业_Java_Spring - Fatal编程技术网

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

Java 如何停止使用spring任务计划的作业,java,spring,Java,Spring,我已经实现了一个示例spring计划任务,其applicationContext如下所示 <task:scheduled-tasks scheduler="myScheduler"> <task:scheduled ref="cron" method="show" cron="0/10 * * * * ?"/> <task:scheduled ref="cron" method="show2" cron="0/15 * * * * ?"/> &

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

<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()

取决于您所说的“停止”是什么意思

  • 业务状况停止: 停止作为业务条件的结果,您应该在方法中评估这些条件,而只是不执行代码。通过这种方式,您可以在运行时停止不需要的执行,运行逻辑以处理结果失败的条件(日志记录、通知等)

  • 非经营状况: 将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']}"/>
    
    
    

    Hmm,你能给我写一个示例方法吗?停止我的taks schedule method show()?好的,那么我如何从调度程序中删除作业?能给我一个axample吗?获取该工作的参考资料,然后打电话取消。我已经在我的回答中添加了这个。我如何才能引用该作业?您必须手动添加到
    任务调度器
    ,即不使用Spring配置。