【问题标题】:how to combine cron expressions?如何组合 cron 表达式?
【发布时间】:2013-09-24 18:31:34
【问题描述】:

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

【问题讨论】:

    标签: cron quartz-scheduler quartz.net


    【解决方案1】:

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

    但您可以定义两个触发器 T1T2 以及一个“更智能”的作业 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 表达式。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多