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

Spring Scheduler每周一1点执行的Cron表达式及fixedDelay可行性咨询

Spring Scheduler 每周一凌晨1点任务的实现方案

嗨,针对你的问题,我来详细解答:

对应的Cron表达式

要实现每周一凌晨1点执行的任务,正确的Cron表达式是:

0 0 1 ? * MON

我来拆解一下每个字段的含义(Cron表达式的顺序是:秒 分 时 日 月 周 年(可选)):

  • 0:秒位,指定整分执行
  • 0:分位,指定整时执行
  • 1:时位,凌晨1点
  • ?:日位,这里用?是因为我们已经指定了周字段(MON),避免日和周字段的冲突(两者不能同时指定具体值)
  • *:月位,每个月都执行
  • MON:周位,表示周一
  • (年位省略,默认每年都执行)

另外,你也可以用数字2代替MON(Cron里周的数字规则是1=周日,2=周一),不过用英文缩写更直观,推荐优先使用MON。

能否使用fixedDelay实现该需求?

答案是不能,原因如下:

  • fixedDelay的核心逻辑是:以上一次任务执行结束的时间为起点,延迟指定时长后执行下一次任务。它是基于「间隔时长」的定时,而非「日历时间点」的定时。
  • 假设你第一次手动触发任务在周一1点,设置fixedDelay = 7 * 24 * 60 * 60 * 1000(7天),看起来前几次会在周一1点执行,但一旦出现以下情况就会完全偏离预期:
    • 如果某次任务执行时间过长(比如超过1小时),下一次执行时间就会变成周一2点,之后每次都会越来越晚
    • 如果服务器重启,任务会在重启后立刻执行一次,之后的执行时间就彻底脱离了周一1点的固定时间点

如果想实现基于日历时间的定时任务,Spring Scheduler中最可靠的方式就是使用Cron表达式,它就是专门为这类「固定日历时间点」的场景设计的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:18:47