0

我有一个需要每周四执行的任务,但是如果当天是圣诞节等特殊假期,则应该将任务更改为另一天(周三或周五),所以我得到的是一个通用表达式加上一些特殊日期,我应该如何将所有这些表达式组合到一个 cron 表达式中以在 Quartz 中使用?谢谢。

4

1 回答 1

0

我认为你不能只用一个表达式来做到这一点,因为没有办法指定假期。

但是您可以定义两个触发器T1T2以及一个“更智能”的 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 回答