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

Quartz cron指定日期不存在时顺延执行的实现方案咨询

Quartz Cron 不存在指定日时自动适配最近有效日的实现方案

方案1:使用CalendarIntervalTrigger(无需自定义代码,完美匹配需求)

不需要用CronTrigger,直接用Quartz内置的CalendarIntervalTrigger就可以原生满足你的需求:

  • 设置触发间隔单位为月,间隔时长为1
  • 设置首次触发时间为任意一个有30日的月份的30日(比如2024-01-30 00:00:00)
  • Quartz会自动处理月份天数不足的场景:当月有30日则30日触发,没有则自动落到当月最后一个有效自然日,完全匹配你举例的2月取28/29日、11月取30日的需求
  • 代码示例:
CalendarIntervalTrigger trigger = newTrigger()
    .withIdentity("trigger1", "group1")
    .startAt(Date.from(LocalDate.of(2024,1,30).atStartOfDay(ZoneId.systemDefault()).toInstant()))
    .withSchedule(calendarIntervalSchedule()
        .withIntervalInMonths(1))
    .forJob("job1", "group1")
    .build();

方案2:自定义TriggerListener(适配所有自定义规则)

如果你的适配规则更灵活,比如需要向前/向后偏移指定天数、或者按业务自定义逻辑计算最近有效日,通过自定义监听器实现即可:

  • 实现TriggerListener接口,重写triggerFired方法,在方法内校验当前触发月份是否存在目标执行日
  • 若不存在目标日期,计算符合规则的最近有效日,调整触发器的下一次触发时间
  • 将自定义监听器注册到Scheduler实例,绑定到对应任务的触发器上即可

两种方案对比

  • CalendarIntervalTrigger方案:无额外开发成本,性能无损耗,完美匹配指定日期缺省取最近月末的通用需求
  • 自定义监听器方案:可完全自定义适配规则,仅需新增几十行代码,无明显性能损耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:36:06