李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • AI工具集
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • 网站地图
    • 网站统计
    • 另一个网站
    • 赞助
  • 星球穿梭
  • 🚇开往
白雪成红
惟坚韧者始能遂其志
  1. 首页
  2. 后端
  3. 正文

SchedulingConfigurer详解

2026年5月15日 约 609 字3 分钟 408 1 2

SchedulingConfigurer 是 Spring 定时任务的高级配置接口,用来替代简单的 @Scheduled 注解。

它的核心作用:
让定时任务支持:动态修改执行周期、程序运行中改 cron、从数据库/配置中心读取 cron 表达式,不用重启服务。


一、它解决什么问题?

  • @Scheduled(cron = "0 0/1 * * * ?"):写死在代码里,改时间必须重启
  • SchedulingConfigurer:cron 可以动态变(数据库/配置文件/Nacos 实时读取)

二、DEMO

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;

@Configuration
@EnableScheduling // 开启定时任务
public class DynamicScheduleConfig implements SchedulingConfigurer {

    // 动态 cron(实际项目从数据库/配置读取)
    private String getCron() {
        // 示例:每秒执行一次
        return "0/1 * * * * ?";
    }

    // 定时任务要执行的业务
    private void doTask() {
        System.out.println("动态定时任务执行:" + System.currentTimeMillis());
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        // 注册一个动态 cron 任务
        taskRegistrar.addTriggerTask(
            // 1. 任务内容
            () -> doTask(),

            // 2. 动态 cron 触发器
            triggerContext -> {
                // 每次执行前都会重新获取 cron → 支持动态修改
                String cron = getCron();
                return new CronTrigger(cron).nextExecutionTime(triggerContext);
            }
        );
    }
}

三、核心知识点

1. 关键方法

void configureTasks(ScheduledTaskRegistrar taskRegistrar);

所有动态任务都在这里注册。

2. 为什么能动态?

因为每次任务执行前,都会重新调用 getCron() 获取最新表达式。

你只要:

  • 把 cron 存在数据库
  • 提供一个接口修改它
  • 不用重启服务 → 定时任务自动生效

3. 多线程配置

Spring 默认定时任务是单线程!
如果任务多、执行慢,会互相阻塞。

添加线程池配置:

@Bean
public Executor taskExecutor() {
    ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler();
    executor.setPoolSize(10); // 10个线程
    executor.setThreadNamePrefix("schedule-task-");
    executor.initialize();
    return executor;
}

然后注册任务时指定线程池:

taskRegistrar.setScheduler(taskExecutor());

四、企业级标准用法(数据库读取 cron)

  1. 建一张表:sys_schedule
    • cron 表达式
    • task_key 任务标识
    • status 状态
  2. 在 getCron() 里查库
  3. 提供接口修改 cron,实时生效

五、适用场景

✅ 动态修改定时任务周期(不用重启)
✅ 从数据库/配置中心读取 cron
✅ 复杂多任务调度
✅ 生产环境标准方案


六、和 @Scheduled 对比

方式 优点 缺点
@Scheduled 简单 cron 写死,不能动态改
SchedulingConfigurer 动态、灵活、生产级 代码稍多

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

SchedulingConfigurer详解

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: Scheduled SchedulingConfigurer Spring
最后更新:2026年5月15日
相关文章
  • 解锁 Spring Boot 10 个高频 "神仙功能"2025年10月15日
  • 了解一下Spring中用了哪些设计模式2019年10月20日
  • SpringBoot常用注解2025年5月28日
  • 分布式服务生成唯一不重复ID(24位字符串)2019年7月13日
  • SpringBoot启动概述(SpringBoot2.1.7)2020年1月10日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复
…

文章评论

  • 皮皮社长Lv 2友

    不懂技术,打个水卡。破了这个0评论。 :18:

    AndroidAndroidChrome 131.0.6778.200Chrome 131.0.6778.200中国中国-湖南-长沙
    2026年5月18日
    00 回复
    • 李锋镝博主

      @皮皮社长 沙发-。-

      macOSmacOSChrome 148.0.0.0Chrome 148.0.0.0中国中国-北京
      2026年5月18日
      00 回复
  • 朋友病了,要挂盐水。给他扎针的是一个实习小护士,扎了半天都没扎进血管。他痛得龇牙咧嘴,无奈叫来了护士长。护士长好手法,只见她一针见血地扎进了血管,然后马上拔出来,把针递给那个实习护士说:“看清楚没有?你再试一次!”

    听点儿音乐吧 朋友~
    文章目录
    最新 热点 随机
    最新 热点 随机
    Kratos-plus v1.1.26版本更新说明 我觉得是时候公布我的导航网站了 代码是 AI 写的,生产事故谁背锅? 给主题增加了游客中心功能 祝大家中秋安康 游本昌去世
    给主题增加了游客中心功能游本昌去世关于主题加载速度优化的一点儿小演进我觉得是时候公布我的导航网站了给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比
    十一节后开工头一天,修了个耳机…… SpringBoot定时任务 - 经典定时任务设计:时间轮(Timing Wheel)案例和原理 AI 编程高效提示词模板库(2025 实战版) 最近厄尔尼诺现象越来越猛了 Claude Code全维度实战指南:从入门到精通,解锁AI编程新范式 MySQL主键索引和普通索引的区别
    最近评论
    fairy 发布于 1 天前(10月02日) 很明显,只能处罚人,当然是人背锅。你能罚AI钱吗?能把AI辞退吗?很明显不能。
    彬红茶 发布于 1 天前(10月02日) 很全面哦~国庆快乐
    彬红茶 发布于 1 天前(10月01日) 确实可以加一下这个功能,我最近就改了,评论区加了个等级,游客中心实属无能为力 :78:
    皮皮社长 发布于 2 天前(10月01日) 快看快看,我皮皮社长上榜了~ :2:
    皮皮社长 发布于 2 天前(10月01日) 我直接把喜欢的网站放到友链中就好了,简单明了~ :40:
    标签聚合
    日常 K8s IDEA JAVA WordPress Spring AI 架构 MySQL JVM 分布式 Redis 多线程 ElasticSearch Claude SQL AI编程 Theme 数据库 SpringBoot
    友情链接
    • 懋和道人
    • 九仞之行
    • Mr.Sun的博客
    • 蜗牛工作室
    • sssr7844的博客
    • Serendipity
    • 皮皮社
    • 彬红茶日记
    • 搬砖日记
    • 临窗旋墨
    • lijie blog
    • 老张博客
    • 知向前端
    • 哥斯拉
    • 韩小韩博客
    • 韩情脉脉
    • 瓦匠个人小站
    • 林羽凡
    • Honesty
    • 志文工作室

    COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

    lifengdi.com

    Domain age badge for lifengdi.com

    Theme Kratos-plus By Dylan Li

    津ICP备2024022503号-3

    京公网安备11011502039375号