Cron Expression,每两天一次,无视周末

时间:2016-01-11 13:02:49

标签: cron quartz-scheduler cronexpression

是否可以创建一个每两天运行一次的Cron Expression并忽略周末?我想要实现的基本上是这个表达式0 0 9 1/2 * ?但忽略了周末。我在以下网站http://www.cronmaker.com/

中验证了我的表达方式

它必须有48小时的间隔。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为您可以安全地使用单个CronTrigger,您需要做的就是将触发器与排除周末的Quartz Calendar相关联。 Quartz发行版附带了多个Calendar实现。您可以查看允许您排除特定工作日的WeeklyCalendar

提供cron表达式为:0 0 9 1/2 * ?,你的工作将在星期一,星期三,星期五,(太阳将被忽略),星期二,星期四,(星期六将被忽略),星期一,。 ..

我认为这应该有效。你也可以尝试CalendarIntervalTrigger重复间隔unit = day,重复间隔= 2以及排除周末的同一个日历。

答案 1 :(得分:0)

我还有另一个答案。也许更简单。

基本上在Quartz中你有三步来完成一项工作:

  • 首先触发器触发,因为其调度规则是这样做的
  • 然后Quartz检查没有违反调度程序的触发器或作业规则,否则执行者被否决(我们将在这里使魔术发生;)
  • 最后Quartz运行工作

如果你想使用你的表达式(例如:0 0 9 1/2 * ?)但忽略周末:

  • 实例化您的Quartz调度程序
  • 添加org.quartz.TriggerListener,执行您不希望触发器触发周末的规则。
  • 创建并安排CRON触发器

org.quartz.TriggerListener是一个可以实现的接口,用于添加其他触发器和作业的规则(请参阅http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/TutorialLesson07) 您必须使用TriggerListener#vetoJobExecution方法来实现您的指定规则