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

Spring Boot中@Scheduled配置的定时任务触发时间与预期不符是什么原因

定时任务触发时间偏差的常见原因

  • Cron表达式配置错误(概率最高)
    Spring框架@Scheduled注解的cron表达式规则为秒 分 时 日 月 周 年(可选),和Linux默认5位crontab规则不同。你当前配置的@Scheduled(cron = "45 7 * * * ?")实际触发规则为每小时的7分45秒执行,并非你期望的每日7点45分执行。如果要实现每日7点45分触发,正确配置应为@Scheduled(cron = "0 45 7 * * ?")。你观察到的9点09分触发,大概率是9点07分45秒触发后,存在1-2分钟的日志延迟或前置业务逻辑处理导致的感知偏差。
  • 定时任务线程池阻塞
    Spring@Scheduled默认使用单线程线程池调度所有定时任务,如果存在其他定时任务执行时间过长、死锁或IO阻塞,会一直占用唯一的调度线程,后续所有任务都会被推迟到线程释放后才能执行,若前序任务刚好阻塞1小时24分钟左右,就会出现你观测到的触发时间偏差。
  • JVM时区与系统时区不匹配
    @Scheduled默认使用JVM默认时区解析cron表达式,而非操作系统时区。即使Windows系统时间正确,如果JVM启动时通过-Duser.timezone参数指定了其他时区,也会导致cron解析的时间和系统时间存在偏差。
  • Windows系统电源策略触发休眠
    Windows Server默认电源计划可能开启了自动休眠、睡眠或CPU低功耗暂停功能,若服务器在7点45分前进入休眠状态,定时任务调度会被暂停,直到系统被唤醒后才会补执行错过的任务,导致触发时间推迟。
  • 其他可能性
    包括JVM出现长时间STW(Stop The World)GC停顿、方法内部存在前置等待逻辑导致业务执行时间晚于实际触发时间、服务当天启动时间晚于7点45分错过首次触发时机等。

内容的提问来源于stack exchange,提问作者de guide

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:00:04