我有一项任务需要每周四执行,但如果这一天是圣诞节这样的特殊假期,那么任务应该改为另一天(周三或周五),所以我得到的是一般表达加上一些特殊日期,我应该如何在一个cron表达式中组合所有这些表达式以在Quartz中使用?感谢。
答案 0 :(得分:0)
我认为你不能用一个表达式来做,因为没有办法指定假期。
但您可以定义两个触发器 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 Calendars的更多示例,请参阅此Quartz tutorial。
此外,您可以使用this tool构建与Quartz兼容的Cron表达式。
希望这有帮助!