我有一个需要每周四执行的任务,但是如果当天是圣诞节等特殊假期,则应该将任务更改为另一天(周三或周五),所以我得到的是一个通用表达式加上一些特殊日期,我应该如何将所有这些表达式组合到一个 cron 表达式中以在 Quartz 中使用?谢谢。
问问题
1599 次
1 回答
0
我认为你不能只用一个表达式来做到这一点,因为没有办法指定假期。
但是您可以定义两个触发器T1和T2以及一个“更智能”的 Job 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 日历的更多示例,请参阅此Quartz 教程。
您还可以使用此工具构建与 Quartz 兼容的 Cron 表达式。
希望这可以帮助!
于 2013-09-18T14:37:08.417 回答