Spring Boot 定时任务详解(从入门到实战)
Spring Boot 内置了强大的任务调度能力基于 Spring Framework 的TaskScheduler抽象开发者可以通过注解或编程方式轻松实现周期性任务。本文将全面介绍其原理、配置、使用模式及最佳实践。一、核心机制概述Spring Boot 的定时任务主要依赖两个组件组件作用EnableScheduling启用 Spring 的任务调度功能开启自动装配Scheduled标记方法为定时任务支持多种调度策略底层默认使用单线程的ThreadPoolTaskScheduler执行任务。若需并发执行多个任务需自定义线程池。✅无需额外依赖spring-boot-starter已包含调度所需模块。二、基础使用Scheduled注解1. 启用定时任务在主启动类或配置类上添加EnableSchedulingSpringBootApplicationEnableScheduling// ← 关键注解publicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}2. 定义定时任务方法创建一个被 Spring 管理的 Bean如Component并在方法上使用ScheduledComponentpublicclassSampleScheduler{privatestaticfinalLoggerlogLoggerFactory.getLogger(SampleScheduler.class);// 固定频率每 5 秒执行一次从上次开始时间算起Scheduled(fixedRate5000)publicvoidfixedRateTask(){log.info(固定频率任务执行: {},LocalDateTime.now());}// 固定延迟上次结束后延迟 3 秒再执行Scheduled(fixedDelay3000)publicvoidfixedDelayTask(){try{Thread.sleep(2000);// 模拟耗时操作log.info(固定延迟任务完成: {},LocalDateTime.now());}catch(InterruptedExceptione){Thread.currentThread().interrupt();}}// 初始延迟 固定频率启动后 10 秒首次执行之后每 6 秒一次Scheduled(initialDelay10000,fixedRate6000)publicvoidinitialDelayTask(){log.info(带初始延迟的任务执行: {},LocalDateTime.now());}// Cron 表达式每天凌晨 1 点执行Scheduled(cron0 0 1 * * ?)publicvoiddailyTask(){log.info(每日凌晨任务执行);}}3.Scheduled参数说明参数类型说明示例fixedRatelong (ms)固定频率从上次开始时间起间隔指定毫秒执行下一次fixedRate 5000fixedDelaylong (ms)固定延迟从上次结束时间起延迟指定毫秒执行下一次fixedDelay 3000initialDelaylong (ms)首次执行前的延迟时间需配合fixedRate/fixedDelayinitialDelay 10000cronString使用Cron 表达式定义复杂调度规则cron 0 0 12 * * ?⚠️ 注意方法必须是无参、void 返回值fixedRate和fixedDelay不能同时使用默认所有任务在同一个线程中串行执行三、Cron 表达式详解Spring 支持6 位或 7 位 Cron 表达式第 7 位“年”可选秒 分 时 日 月 周 [年] * * * * * * *常用符号说明符号含义示例*任意值*表示每秒?不指定值用于“日”和“周”互斥日10, 周?-范围10-12表示 10,11,12,枚举MON,WED,FRI表示周一、三、五/步长0/5表示从 0 开始每 5 个单位一次常见 Cron 表达示例表达式含义0 0 12 * * ?每天中午 12 点0 15 10 ? * MON-FRI工作日 10:150 */5 * * * ?每 5 分钟0 0/30 8-18 * * ?工作时间8-18点每半小时0 0 0 L * ?每月最后一天 0 点0 0 0 ? * SUN每周日 0 点 在线生成工具推荐CronMaker 或 FreeFormatter四、多线程并发执行默认单线程会导致任务阻塞。若需并行执行需自定义线程池方式一实现SchedulingConfigurerConfigurationEnableSchedulingpublicclassSchedulerConfigimplementsSchedulingConfigurer{OverridepublicvoidconfigureTasks(ScheduledTaskRegistrartaskRegistrar){taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5)// 5 个线程);}}方式二声明TaskSchedulerBeanBeanpublicTaskSchedulertaskScheduler(){ThreadPoolTaskSchedulerschedulernewThreadPoolTaskScheduler();scheduler.setPoolSize(10);scheduler.setThreadNamePrefix(scheduled-task-);returnscheduler;}✅ 推荐方式一更符合 Spring Boot 自动配置风格。五、动态定时任务运行时修改调度规则当需要从数据库、配置中心等动态加载 Cron 表达式时需使用SchedulingConfigurer编程式注册。实现步骤创建任务配置表如scheduled_task实现SchedulingConfigurer从数据源读取调度规则使用Trigger动态计算执行时间完整示例ComponentpublicclassDynamicScheduledTaskimplementsSchedulingConfigurer{AutowiredprivateTaskConfigServiceconfigService;// 你的配置服务OverridepublicvoidconfigureTasks(ScheduledTaskRegistrarregistrar){// 注册 GitHub Trending 抓取任务registrar.addTriggerTask(this::fetchGitHubTrending,triggerContext-{StringcronconfigService.getTaskCron(github_trending);if(cronnull||cron.trim().isEmpty()){returnnull;// 不执行}returnnewCronTrigger(cron).nextExecutionTime(triggerContext);});// 可注册多个任务...}privatevoidfetchGitHubTrending(){// 实际业务逻辑System.out.println(执行 GitHub Trending 抓取任务);}}✅优势修改数据库中的 Cron 表达式后下次调度自动生效无需重启应用。六、条件化启用定时任务通过ConditionalOnProperty控制任务是否加载ComponentConditionalOnProperty(nameapp.scheduler.github.enabled,havingValuetrue,matchIfMissingfalse)publicclassGitHubScheduledTask{Scheduled(cron${app.scheduler.github.cron:0 30 0 * * ?})publicvoidfetch(){// ...}}对应application.ymlapp:scheduler:github:enabled:truecron:0 0 2 * * ?# 可覆盖默认值✅ 适用于不同环境dev/test/prod差异化配置。七、最佳实践与注意事项✅ 推荐做法优先使用cron表达力强适合生产环境避免长时间阻塞任务考虑异步处理Async记录执行日志便于监控和排查设置合理的线程池大小防止资源耗尽关键任务加异常处理避免因异常导致调度中断⚠️ 常见陷阱单线程阻塞默认串行执行长任务会阻塞后续任务Cron 表达式错误导致任务不执行无报错时区问题Cron 默认使用服务器时区建议统一为 UTC 或明确指定任务重叠fixedRate不管任务是否完成可能造成并发 监控建议记录每次任务的开始时间、结束时间、耗时、结果集成 Micrometer Prometheus 监控任务执行指标对失败任务实现告警通知八、高级扩展可选需求解决方案分布式调度避免多实例重复执行集成 Quartz 数据库锁 / Redis 分布式锁任务持久化与管理界面使用 XXL-JOB、Elastic-Job 等分布式任务框架条件触发如文件到达、消息队列结合EventListener或消息监听器 对于简单场景Spring Boot 内置调度已足够复杂场景建议使用专业调度框架。总结场景推荐方案简单固定任务日报、清理Scheduledcron需要并发执行自定义TaskScheduler线程池运行时修改调度规则SchedulingConfigurer 数据库多环境差异化配置ConditionalOnProperty 配置文件Spring Boot 的定时任务设计简洁而强大既能满足日常开发需求又具备足够的扩展性。合理使用可大幅提升系统自动化能力。

相关新闻

YOLO26:面向实时目标检测的关键架构优化与性能基准测试

YOLO26:面向实时目标检测的关键架构优化与性能基准测试

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 https://arxiv.org/pdf/2509.25164 计算机视觉研究院专栏 Column of Computer Vision Institute 本研究对Ultralytics YOLO26进行了…

2026/7/3 8:07:40 阅读更多 →
leetcode 896. Monotonic Array 单调数列-耗时100

leetcode 896. Monotonic Array 单调数列-耗时100

Problem: [896. Monotonic Array 单调数列](https://leetcode.cn/problems/monotonic-array/desc耗时100%&#xff0c;从不重复的相邻数字开始&#xff0c;给定初始值bool increasing (nums[k-1] < nums[k]);&#xff0c;然后判断后续的是否符合同样的结果if(increasing!(n…

2026/7/4 8:03:38 阅读更多 →
两个95后华人,搞出硬件版Clawdbot,售价1700元

两个95后华人,搞出硬件版Clawdbot,售价1700元

Jay 发自 凹非寺量子位 | 公众号 QbitAIOpenClaw&#xff08;原名Clawdbot&#xff09;爆火&#xff0c;「贾维斯」狂潮席卷全球。刚看了下京东&#xff0c;本地Agent甚至已经成了Mac mini的广告语……最近硅谷的一个本地Agent项目也很有关注度&#xff0c;而且是软硬件打包好&…

2026/7/2 20:30:38 阅读更多 →

最新新闻

AI规模化落地:从概念验证到生产环境的实践指南

AI规模化落地:从概念验证到生产环境的实践指南

1. 从概念验证到规模化落地的鸿沟 在过去的五年里&#xff0c;我作为AI解决方案架构师参与了超过20家企业的人工智能转型项目。一个令人警醒的数据是&#xff1a;根据Gartner统计&#xff0c;约85%的AI试点项目最终未能实现规模化部署。这个数字背后反映的正是我们今天要探讨的…

2026/7/4 18:33:20 阅读更多 →
STM32F303VE与TC78H653FTG驱动有刷电机方案解析

STM32F303VE与TC78H653FTG驱动有刷电机方案解析

1. 为什么选择TC78H653FTGSTM32F303VE组合驱动有刷电机在工业控制和消费电子领域&#xff0c;直流有刷电机因其结构简单、成本低廉、控制方便等优势&#xff0c;至今仍占据重要地位。但要让这种"古老"的电机发挥出现代化性能&#xff0c;驱动电路和控制器选型尤为关键…

2026/7/4 18:31:20 阅读更多 →
零基础网络渗透学习指南:从TCP/IP到实战靶场的完整路径

零基础网络渗透学习指南:从TCP/IP到实战靶场的完整路径

1. 从零到一&#xff1a;网络渗透学习的本质与心态重塑“零基础入门网络渗透到底要怎么学&#xff1f;” 这个问题背后&#xff0c;是无数对网络安全充满好奇&#xff0c;却又被其神秘感和庞杂知识体系吓退的新手最真实的困惑。我见过太多人&#xff0c;一上来就直奔Kali Linux…

2026/7/4 18:29:19 阅读更多 →
AI开发者工作流选型指南:GLM-5、Kimi、MiniMax等6大模型实战对比

AI开发者工作流选型指南:GLM-5、Kimi、MiniMax等6大模型实战对比

1. 这不是模型对比&#xff0c;是开发者工作流的生存指南 你有没有过这种体验&#xff1a;凌晨两点&#xff0c;手机弹出一条短信——“您的API调用额度已超限&#xff0c;当前计费周期剩余余额&#xff1a;0.37”。你猛坐起来&#xff0c;手抖着打开监控面板&#xff0c;发现一…

2026/7/4 18:29:19 阅读更多 →
Si4732与PIC18F86K90在嵌入式音频系统中的应用与优化

Si4732与PIC18F86K90在嵌入式音频系统中的应用与优化

1. 项目背景与核心组件解析在数字音频处理领域&#xff0c;Si4732和PIC18F86K90的组合堪称黄金搭档。作为一名长期从事嵌入式音频系统开发的工程师&#xff0c;我亲身体验过这对组合带来的音质飞跃。Si4732是Silicon Labs推出的高性能数字调谐收音芯片&#xff0c;而PIC18F86K9…

2026/7/4 18:29:19 阅读更多 →
AD74413R与STM32F303RC硬件设计与SPI通信实现

AD74413R与STM32F303RC硬件设计与SPI通信实现

1. AD74413R与STM32F303RC的硬件协同设计AD74413R是一款四通道软件可配置输入/输出器件&#xff0c;每个通道可独立配置为ADC输入、DAC输出、数字输入或数字输出模式。与STM32F303RC搭配使用时&#xff0c;需要特别注意两者的电气特性和接口匹配。1.1 硬件连接要点SPI接口应采用…

2026/7/4 18:23:18 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布&#xff0c;这是一个关键的安全修复版本&#xff0c;修复了多个方面的问题&#xff0c;还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出&#xff0c;mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南&#xff1a;使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL&#xff08;Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器&#xff0c;与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻