必须显式启用调度器、声明可调度组件、选择时间策略并调优线程池,否则任务将串行阻塞;在启动类加@enablescheduling,方法需void无参且为spring bean,支持fixedrate、fixeddelay和cron三种策略,并在application.yml中配置spring.task.scheduling.pool.size以启用多线程。

要在 Spring Boot 4.4 Starter 中可靠启用定时任务并完成基础调度配置,必须显式激活调度器、声明可调度组件、选择合适的时间策略,且不能遗漏线程池调优这一关键环节——否则多个任务会串行阻塞,导致延迟累积甚至任务丢失。
启用 Spring Boot 定时任务支持
在主启动类(即标注 @SpringBootApplication 的类)上添加 @EnableScheduling 注解。
这一步不可省略,Spring Boot 4.4 不再默认启用调度器;若未加此注解,所有 @Scheduled 方法将完全静默,不报错也不执行。
定义可调度的业务方法
新建一个类,用 @Component 声明为 Spring Bean:
方法必须满足三个硬性条件:返回类型为 void、无参数、所在类由 Spring 容器管理。任意一条不满足,任务注册失败且无日志提示。
在目标方法上添加 @Scheduled 注解,并任选一种时间策略:
方法一:固定频率执行(从上次开始时间起算)
@Scheduled(fixedRate = 30000) → 每 30 秒触发一次,不管上一次是否执行完。
方法二:固定延迟执行(以上次结束时间为起点)
@Scheduled(fixedDelay = 20000) → 上次执行完毕后等待 20 秒再启动下一轮。
方法三:Cron 表达式(最灵活,支持秒级精度)
@Scheduled(cron = "0 0/5 * * * ?") → 每 5 分钟执行一次(注意:Spring Cron 是 6 位格式,首位为秒)。
配置线程池避免任务阻塞
第一步:在 application.yml 中添加以下配置:
spring:
task:
scheduling:
pool:
size: 5
第二步:确认该配置生效——Spring Boot 4.4 默认仍使用单线程调度器,若不显式设 size,哪怕定义了 10 个定时任务,它们也排队执行,第 3 个任务可能比预期晚数分钟才启动。
第三步:观察控制台日志中的线程名,若出现 task-1、task-2 等不同编号,说明线程池已生效;若始终只看到 scheduled-task-1,说明配置未加载或 YAML 缩进错误。











