Java SpringBoot每4小时执行的Scheduler CRON任务失效问题排查
Spring Boot 定时任务每4小时执行异常的解决方案
问题根源
你使用的6位CRON表达式 0 0 */4 * * * 存在日与星期字段冲突的问题。Spring Boot的CRON规则中,第4位(日)和第6位(星期)是互斥字段,不能同时使用*(表示所有值),否则调度器会出现解析逻辑异常,导致任务仅触发一次后停止。
修正后的6位CRON表达式
@Scheduled(cron = "0 0 */4 * * ?") @SchedulerLock(name = "InsightPhotoUploaderCronJob", lockAtMostFor = PT5M, lockAtLeastFor = PT5M)
?用于表示忽略星期字段的调度判断,避免与日字段的*产生冲突,确保每4小时整点触发任务。
额外排查建议
- 查看Spring Boot日志,搜索
TaskScheduler相关日志,确认任务的触发记录和调度状态。 - 确认服务器时区与你预期的一致,若时区偏差可能导致任务触发时间不符合预期。
- 你之前10分钟间隔的任务(
0 */10 * * * *)同样存在日/星期冲突,只是因触发频率高未暴露问题,建议一并修正为0 */10 * * * ?以避免潜在隐患。
内容的提问来源于stack exchange,提问作者CodeFreak
相关产品推荐
相关产品推荐

