Spring Scheduled 定时任务速查
相关概念:spring-boot
@Scheduled 是 Spring 里最常见的定时任务入口,适合那种“配置简单、逻辑明确”的周期任务。
最小用法
通常只需要两步:
- 开启调度能力,例如
@EnableScheduling - 在 Spring 管理的 Bean 方法上加
@Scheduled
三个最常用的触发方式
cron:强调“在某个时刻执行”fixedRate:强调“两次开始之间的间隔”fixedDelay:强调“上次结束到下次开始之间的间隔”
容易混淆的点
fixedRate
更像“按节拍发起”。
如果任务执行时间超过设定间隔,下一轮可能会紧跟着补上。
fixedDelay
更像“做完再等一会儿再开始下一次”。
它更适合希望任务之间明确留出空档的场景。
默认执行模型的直觉
如果不额外配线程池,多个 @Scheduled 任务的执行模型通常比很多人想象得更保守。
实际设计时要先问清楚两件事:
- 任务是否允许堆积
- 任务之间是否需要并行
cron 什么时候更合适
如果需求更像:
- 每天 9 点执行
- 每小时第 5 分钟执行
- 每 10 秒执行一次
那 cron 往往最直观。
工程判断
如果已经开始关心下面这些问题:
- 失败重试
- 分布式去重
- 集群里只执行一次
- 大量任务并发调度
那通常说明已经快要超出单纯 @Scheduled 的舒适区了。