如何结合cron表达式?

时间:2013-09-16 05:30:36

标签: cron quartz-scheduler quartz.net

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

1 个答案:

答案 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表达式。

希望这有帮助!