千家信息网

Spring Task如何动态修改任务执行计划cron

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下Spring Task如何动态修改任务执行计划cron,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Sp
千家信息网最后更新 2026年11月02日Spring Task如何动态修改任务执行计划cron

小编给大家分享一下Spring Task如何动态修改任务执行计划cron,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    Spring Task 动态修改任务执行计划cron

    Spring Task 能够在不重启服务的情况下,动态修改批量任务执行时间。

    原理

    Spring Task目前仅支持TriggerContext上修改下次执行时间(批量任务执行后回调SchedulingConfigurer.configureTasks,让用户可以重新设置Trigger,从而动态修改下次执行时间)),这种方法的弊端就是"执行时间不能实时生效"。

    为此,看了下task文档,感觉若要实现实时生效功能,必须代码里手工启动/停止Spring task任务。

    Demo如下

    首先,xml里不需要配置springTask相关的executor和scheduler。其次,在代码里自定义scheduler和taskRegistrar(SpringTask启动的类)。最后,开个线程,模拟动态修改cron表达式的接口。

    输出如下:(35min没有执行原task)

    INFO 27-11 14:34:10,476 - Initializing ExecutorService
    INFO 27-11 14:34:10,484 - nextExecutionTime: 0 35 14 * * ?
    修改cron为: 0 36 14 * * ?
    INFO 27-11 14:34:20,487 - Initializing ExecutorService
    INFO 27-11 14:34:20,488 - nextExecutionTime: 0 36 14 * * ?
    INFO 27-11 14:36:00,001 - dynamicCronTask is running...
    INFO 27-11 14:36:00,001 - nextExecutionTime: 0 36 14 * * ?

    Spring @Scheduled定时任务动态修改cron参数

    • 在定时任务类上增加@EnableScheduling注解,并实现SchedulingConfigurer接口。(注意低版本无效)

    • 设置一个静态变量cron,用于存放任务执行周期参数。

    • 另辟一线程,用于模拟实际业务中外部原因修改了任务执行周期。

    • 设置任务触发器,触发任务执行,其中就可以修改任务的执行周期。

    Class : SpringDynamicCornTask

    package com.xindatai.ibs.lime.dycSchedul;import java.util.Date;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.annotation.Lazy;import org.springframework.scheduling.Trigger;import org.springframework.scheduling.TriggerContext;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.SchedulingConfigurer;import org.springframework.scheduling.config.ScheduledTaskRegistrar;import org.springframework.scheduling.support.CronTrigger;import org.springframework.stereotype.Component;/** * Spring动态周期定时任务 在不停应用的情况下更改任务执行周期 *  * @author Liang * *         2017年6月1日 */@Lazy(false)@Component@EnableSchedulingpublic class SpringDynamicCornTask implements SchedulingConfigurer {    private static final Logger logger = LoggerFactory.getLogger(SpringDynamicCornTask.class);    private static String cron;    private SpringDynamicCornTask() {        cron = "0/5 * * * * ?";        // 开启新线程模拟外部更改了任务执行周期        new Thread(new Runnable() {            @Override            public void run() {                try {                    Thread.sleep(15 * 1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                cron = "0/10 * * * * ?";                System.out.println("cron change to : " + cron);            }        }).start();    }    @Override    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {        taskRegistrar.addTriggerTask(new Runnable() {            @Override            public void run() {                // 任务逻辑                logger.info("dynamicCronTask is running...");            }        }, new Trigger() {            @Override            public Date nextExecutionTime(TriggerContext triggerContext) {                // 任务触发,可修改任务的执行周期                CronTrigger trigger = new CronTrigger(cron);                Date nextExecutionTime = trigger.nextExecutionTime(triggerContext);                return nextExecutionTime;            }        });    } }

    Console :

    [INFO 2017-06-01 12:26:25 SpringDynamicCornTask] - dynamicCronTask is running...
    [INFO 2017-06-01 12:26:30 SpringDynamicCornTask] - dynamicCronTask is running...
    [INFO 2017-06-01 12:26:35 SpringDynamicCornTask] - dynamicCronTask is running...
    cron change to : 0/10 * * * * ?
    [INFO 2017-06-01 12:26:40 SpringDynamicCornTask] - dynamicCronTask is running...
    [INFO 2017-06-01 12:26:50 SpringDynamicCornTask] - dynamicCronTask is running...
    [INFO 2017-06-01 12:27:00 SpringDynamicCornTask] - dynamicCronTask is running...

    以上是"Spring Task如何动态修改任务执行计划cron"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

    任务 动态 周期 时间 篇文章 线程 代码 内容 参数 实时 情况 接口 为此 不怎么 业务 功能 原因 原理 变量 大部分 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 互联网科技工作委员会毛军 科技平台互联网 合肥互联网科技公司 苏州互联网科技贷款公司 友谊互联网络科技 互联网科技咨询 多迪互联网科技有限公司 中正互联网科技招聘 衡水科技产业互联网平台 互联网实体化科技化 晓花互联网科技有限公司网址 互联网科技扶贫时间 东莞新华互联网科技学校 佛山市拉法互联网科技有限公司 合肥互联网科技公司公章图片 云南互联网科技学费 美国五大互联网科技公司市值多少 保山浩联互联网科技有限公司 互联网科技创业有什么好项目 网络科技有限互联网 北京互联网科技有限公司 互联网科技公司怎么样 互联网科技网站 北京大学互联网科技怎么样 成都互联网科技公司100强 链环科技传统企业怎么转型互联网 怎样加入科技互联网 互联网科技融合创新 中国互联网公司的科技投入
    0