You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么@Scheduled在Spring Boot应用正常运行但@SpringBootTest中不执行

问题排查与解决

结论

@Scheduled方法在测试环境不执行的问题和JUnit版本无关,是Spring Boot测试默认的包扫描规则导致的。

根因说明

@SpringBootTest注解默认只会扫描当前测试类所在包及其子包下的配置:

  • 你的测试类存放在com.itsedo.test包下
  • 标注了@EnableScheduling调度开启注解的启动类存放在com.itsedo包下
    测试上下文启动时没有扫描到启动类的调度配置,不会初始化定时任务,因此你的调度方法从未执行。

修复方案

任选以下一种方式即可解决问题:

  • 方式1:显式指定测试加载的启动类,让上下文正确读取调度配置
    修改测试类的@SpringBootTest注解:
@SpringBootTest(classes = BootApplication.class)
  • 方式2:调整测试类的存放路径,将ScheduledTasksTest.java移动到com.itsedo包下,和启动类同包,即可触发自动扫描加载调度配置。

补充说明

你现有的测试逻辑没有问题:使用awaitility等待10秒,验证5秒执行一次的任务至少触发2次,只要调度配置被正确加载,测试就可以正常通过。

内容的提问来源于stack exchange,提问作者Constantine Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:15:04