@scheduled定时任务需区分cron与fixedrate:cron按日历时间触发(如每天12点),格式为“秒 分 时 日 月 周 [年]”,支持通配符;fixedrate按固定间隔启动(如每5秒),从上次启动计时,可能重叠执行。

@Scheduled 注解配置定时任务,关键在选对触发方式:cron 适合按日历时间点执行(比如每天 9 点、每周一上午),fixedRate 适合严格按固定间隔重复执行(比如每 5 秒跑一次),两者逻辑不同,不能混用。
cron 表达式配置
cron 是最灵活的方式,用字符串定义执行时刻,格式为 秒 分 时 日 月 周 [年](6 或 7 位),中间用空格分隔。年份可省略。
- 常用位置含义:第1位是秒(0–59)、第2位是分(0–59)、第3位是小时(0–23)、第4位是日(1–31)、第5位是月(1–12)、第6位是星期(1=周日,或 SUN/MON/…,也支持 0 和 7 都表示周日)
- 通配符要记牢:* 表示任意值,? 表示不指定(日和周不能同时用 *,必须一个用 ?),/ 表示“从某值开始,每隔多少执行”,比如
"0 */5 * * * ?"表示每 5 分钟执行一次(秒=0,分=0/5 即 0,5,10,…) - 典型例子:
@Scheduled(cron = "0 0 12 * * ?")每天中午 12:00 执行;@Scheduled(cron = "0 0 9-17 * * MON-FRI")工作日早 9 点到下午 5 点整点各执行一次
fixedRate 配置
fixedRate 表示“以固定频率执行”,单位是毫秒,它从上一次任务的启动时间开始计时,不管上次有没有执行完。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如:
@Scheduled(fixedRate = 5000)表示每 5 秒启动一次任务——哪怕上次任务耗时 6 秒,下一次仍会在第 5 秒准时开始,可能造成重叠执行 - 常搭配
initialDelay使用,比如@Scheduled(fixedRate = 5000, initialDelay = 2000)表示首次延迟 2 秒后执行,之后每 5 秒执行一次 - 注意:方法不能有参数、不能有返回值,所在类必须被 Spring 管理(如加 @Component)
基础前提不能漏
无论用 cron 还是 fixedRate,都必须先启用调度功能:
- 在 Spring Boot 启动类或配置类上加
@EnableScheduling - 定时方法必须定义在 Spring Bean 中(如 @Component 类里)
- 默认单线程执行——多个 @Scheduled 方法会串行排队;如需并行,得自定义
TaskScheduler并配置线程池
cron 和 fixedRate 别混淆
cron 是“看钟表”,比如“每天 8:00”;fixedRate 是“掐秒表”,比如“每 3 秒一次”。如果任务执行时间不稳定,又不想堆积或并发,更适合用 fixedDelay(等上一次结束再等固定延迟),而不是 fixedRate。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










