【发布时间】:2013-09-24 18:31:34
【问题描述】:
我有一个任务需要每周四执行,但是如果那天是圣诞节等特殊节日,任务应该改到另一天(星期三或星期五),所以我得到的是一个通用表达式加上一些特殊日期,我应该如何将所有这些表达式组合到一个 cron 表达式中以在 Quartz 中使用?谢谢。
【问题讨论】:
标签: cron quartz-scheduler quartz.net
我有一个任务需要每周四执行,但是如果那天是圣诞节等特殊节日,任务应该改到另一天(星期三或星期五),所以我得到的是一个通用表达式加上一些特殊日期,我应该如何将所有这些表达式组合到一个 cron 表达式中以在 Quartz 中使用?谢谢。
【问题讨论】:
标签: cron quartz-scheduler quartz.net
我认为你不能只用一个表达式来做到这一点,因为没有办法指定假期。
但您可以定义两个触发器 T1 和 T2 以及一个“更智能”的作业 J1:
J1 上的触发器 T1 使用 HolidayCalendar 每星期四 触发,这将排除任意日期触发作业执行
//Define an HolidayCalendar and add it to Scheduler
HolidayCalendar cal = new HolidayCalendar();
cal.addExcludedDate( someDate );
sched.addCalendar("myHolidays", cal, false);
//Create the trigger T1 to use the holydayCalendar
...
triggerT1.setCalendarName("myHolidays");
//schedule job with trigger T1
在 J1 上定义一个触发器 T2,该触发器在您选择的替代日期(星期三或星期五)触发。
J1 作业必须决定是否开始使用 HolydayCalendar 执行其业务逻辑。有很多简单的方法可以做到这一点,例如:
//Get Holyday calendar from Scheduler instance
HolidayCalendar cal = sched.getCalendar("myHolidays");
//Decide here if execute or not
if (today is an "alternative" day && lastThursday is an holiday) {
//Job real business logic
}
有关石英日历的更多示例,请参阅此Quartz tutorial。
您也可以使用this tool 来构建与 Quartz 兼容的 Cron 表达式。
希望这会有所帮助!
【讨论】: