Spring Scheduled 定时任务速查

相关概念:spring-boot

@Scheduled 是 Spring 里最常见的定时任务入口,适合那种“配置简单、逻辑明确”的周期任务。

最小用法

通常只需要两步:

  1. 开启调度能力,例如 @EnableScheduling
  2. 在 Spring 管理的 Bean 方法上加 @Scheduled

三个最常用的触发方式

  • cron:强调“在某个时刻执行”
  • fixedRate:强调“两次开始之间的间隔”
  • fixedDelay:强调“上次结束到下次开始之间的间隔”

容易混淆的点

fixedRate

更像“按节拍发起”。

如果任务执行时间超过设定间隔,下一轮可能会紧跟着补上。

fixedDelay

更像“做完再等一会儿再开始下一次”。

它更适合希望任务之间明确留出空档的场景。

默认执行模型的直觉

如果不额外配线程池,多个 @Scheduled 任务的执行模型通常比很多人想象得更保守。

实际设计时要先问清楚两件事:

  • 任务是否允许堆积
  • 任务之间是否需要并行

cron 什么时候更合适

如果需求更像:

  • 每天 9 点执行
  • 每小时第 5 分钟执行
  • 每 10 秒执行一次

cron 往往最直观。

工程判断

如果已经开始关心下面这些问题:

  • 失败重试
  • 分布式去重
  • 集群里只执行一次
  • 大量任务并发调度

那通常说明已经快要超出单纯 @Scheduled 的舒适区了。