【问题标题】:Building a Quartz Cron expression that includes current date构建包含当前日期的 Quartz Cron 表达式
【发布时间】:2017-04-29 19:51:53
【问题描述】:

是否有可能有一个带有 cron 表达式的 (Quartz) 调度程序,它每 5 天触发一次,包括今天的日期。 例如,如果我在 2016 年 12 月 14 日安排工作,间隔 5 天,那么它应该在 12 月 14 日、12 月 19 日、12 月 24 日、12 月 29 日、1 月 3 日、1 月 8 日、1 月 13 日、1 月 18 日触发, 1 月 23 日, 1 月 28 日, 2 月 2 日等等.... ? 我试过 "17 33 15 14/5 * ? *" 但没有给出准确的结果。 请帮忙!!!

【问题讨论】:

  • 为什么你没有得到准确的结果?有什么问题。
  • 尽管您的查询是正确的,但它不会像您预期的那样工作。我认为使用 CRON 语法是不可能的。这是因为您想从具体日期(14.12.2016...)开始计数。 Cron 计数总是从日期的一部分开始。通过编写 14/5,您定义了您本月的第一天是 14,因此每个下个月都将从 14 开始。它会正确评估为 19、24 等等......但是......还有一个问题,因为评估者总是从 14 开始,你的日期总是一样的,它不会“浮动”。为此,您将需要不同类型的评估者。

标签: cron quartz-scheduler crontrigger


【解决方案1】:

CronTrigger 不适合这种调度,因为它们不能使用 cron 表达式来表达。您想要做的是使用专门为这些目的量身定制的CalendarIntervalTrigger

我在我们的 Quartz 调度程序管理和监控工具 (QuartzDesk) 中附上了 CalendarIntervalTrigger 编辑器的屏幕截图。

如您所见,您需要做的就是:

  1. 将触发器的开始日期时间设置为 2016 年 12 月 14 日。
  2. 将重复间隔单位设置为“天”。
  3. 将重复间隔设置为 5(即 5 天)。

在编辑器窗口旁边,有一个视图显示您为触发器计算的下一次触发时间。列表中缺少 12 月 14 日和 12 月 19 日,因为今天是 12 月 20 日,视图仅显示未来触发触发时间。

以编程方式创建 CalendarIntervalTrigger 的实际 Java 代码类似于您用于创建 CronTrigger 的代码,因此我不在这里包含它。重点是您必须使用不同的触发器类型并设置它的两个属性,如上所述。

【讨论】:

  • 我用过这个... CalendarIntervalScheduleBuilder schedule = calendarIntervalSchedule().withIntervalInDays((int) interval); trigger = newTrigger().withIdentity(jobName, groupName).startAt(startAt).withSchedule(schedule.inTimeZone(TimeZone.getTimeZone(timezoneId)).withMisfireHandlingInstructionDoNothing()).build();
  • 我很高兴它对你有用。如果我的回答对您有所帮助,请考虑将其勾选为已接受的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多