当前位置: 首页 > news >正文

SpringBoot @Scheduled 注解详解

让方法周期性自动执行,轻松实现定时任务!


作用

为方法添加定时任务功能,支持按固定间隔、延迟或Cron表达式触发执行。
基于Spring Task调度,适用于日志清理、数据同步等周期性场景。


使用方法

  1. 启用定时任务
    启动类添加 @EnableScheduling
@SpringBootApplication
@EnableScheduling
public class App { ... }
  1. 标注需执行的方法

在方法上添加 @Scheduled,并指定触发规则:

@Component
public class TaskService {// 方式1:固定速率(间隔时间包含任务执行时间)@Scheduled(fixedRate = 5000)  // 每5秒执行一次public void task1() { ... }// 方式2:固定延迟(任务完成后间隔指定时间)@Scheduled(fixedDelay = 3000)  // 任务结束3秒后再次执行public void task2() { ... }// 方式3:Cron表达式(灵活控制时间)@Scheduled(cron = "0 0 2 * * ?")  // 每天凌晨2点执行public void task3() { ... }
}

注意点

  • 单线程阻塞:默认单线程执行任务,耗时任务会阻塞后续任务 → 需配置线程池(示例):
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));}
}
  • 时区问题:Cron表达式默认使用服务器时区 → 指定时区:@Scheduled(cron="0 0 0 * * ?", zone="Asia/Shanghai")
  • 分布式问题:多实例部署会导致任务重复执行 → 结合Redis锁或使用分布式调度框架(如Quartz)。

Cron表达式详解

格式:秒 分 时 日 月 周 年(可选)

字段允许值特殊符号
0-59* , - / ?
0-59同上
0-23同上
1-31* , - / ? L W
1-12 或 JAN-DEC* , - /
1-7 或 SUN-SAT* , - / ? L #

常用符号

  • *:任意值
  • ?:不指定(用于日或周字段冲突时)
  • -:范围(如 10-20
  • /:间隔(如 0/5 秒 → 每5秒)
  • L:最后一天(日)/ 最后一周(周)
  • W:最近工作日(如 15W 当月15日最近的工作日)

高频Cron表达式表

(6位格式:秒 分 时 日 月 周,兼容Spring Task)

表达式说明应用场景示例
0/10 * * * * ?每隔10秒执行一次实时监控、数据刷新
0 0/5 * * * ?每隔5分钟执行一次定时拉取API数据
0 0 * * * ?每小时整点执行日志归档、缓存清理
0 0 9-18 * * ?每天9点到18点整点执行工作日定时通知任务
0 0 12 * * ?每天中午12点执行统计日报生成
0 0 0 * * ?每天凌晨0点执行日终数据结算
0 0 0 1 * ?每月1号凌晨0点执行月度报表生成
0 0 8 ? * 2-6每周一至周五早上8点执行(2-6=周一~周五)工作日晨间任务
0 0 10 L * ?每月最后一天上午10点执行(L=最后一天)月末数据备份
0 0 0 LW * ?**每月最后一个工作日的0点执行避免在非工作日执行月末任务
0 0 0 3W * ?每月3日最近的工作日0点执行(若3日为周末则提前)避开周末的固定日任务
0 0 0 1 1 ?每年1月1日0点执行年度初始化任务

特殊规则扩展表

在这里插入图片描述

注意事项

  1. 验证工具:使用 Cron表达式在线生成器 或 IDEA插件校验合法性。
  2. 时区问题:默认跟随服务器时区,可通过 zone = "GMT+8" 显式指定(如北京时间)。
  3. 性能避坑:避免秒级高频任务导致线程阻塞,必要时结合 @Async 异步执行。

📌 复制即用,效率翻倍!


最佳实践

  • 轻量级任务用 @Scheduled,复杂场景用 Quartz
  • 任务方法避免长时间阻塞,必要时拆分成异步任务(@Async)。
  • 通过 cron-validator 库或在线工具校验表达式合法性。

掌握 @Scheduled,轻松实现精准调度! 🚀

http://www.dtcms.com/a/402940.html

相关文章:

  • layui 表格行级 upload 上传操作
  • 【Unity 入门教程】三、如何设置自定义字体(解决中文乱码问题)
  • STM32开发(FreeRTOS实时操作系统)
  • RocketMQ-生产常见问题汇总
  • 成都网站托管外包施工企业科技宣传片
  • 小厂 Java 面试,难度怎么样?
  • Webpack5 第一节
  • 【深入理解JVM】常见的垃圾回收器
  • 东莞企业建设网站官网有限公司百度一下百度网页版主页
  • 【大模型:知识图谱】--7.Neo4j数据库的导入和导出
  • 数据结构与算法(栈)
  • Coze源码分析-资源库-创建数据库-后端源码-基础设施/数据存储层
  • PySpark 安装教程及 WordCount 实战与任务提交
  • 制作网站的公司八大建筑央企排名
  • zynq纯PL读取XADC
  • 【FastMCP】中间件
  • bigo二面总结
  • 个人网站建设思路省级别网站建设方案
  • 测试自动化教程:Parasoft如何流重定向与单元测试自动化
  • 开源AI大模型、AI智能名片与S2B2C商城小程序在价值观型社群构建与运营中的价值与应用
  • 郑州 网站建设公司阿里企业邮箱收费标准一年多少钱
  • Day03:小程序的常用操作
  • 交互的脉络:小程序事件系统详解
  • 自助建站免费平台深圳建设管理中心网站首页
  • LVS虚拟调度器学习
  • 【LVS入门宝典】LVS-TUN模式原理与配置:跨越网络界限的负载均衡解决方案
  • 【LVS入门宝典】LVS-TUN模式配置实战以及配置关键点:Real Server的路由表调整、ipip模块加载
  • LVS、Nginx、HAProxy 的区别
  • 是什么让边缘电脑真正工业化?
  • html5手机网站开发环境怎样建设淘宝客导购网站