代码之家  ›  专栏  ›  技术社区  ›  ps0604

如何在前一个或下一个工作日运行Quartz调度程序

  •  1
  • ps0604  · 技术社区  · 7 年前

    In this article 它解释了如何将Quartz排除在特定日历日的运行之外,但我需要的是不同的东西,如果触发日历在假日运行,我需要在前一个或下一个工作日运行作业。

    例如,假设作业计划每月运行一次,包括2019年3月29日(星期五)的假日。

    这意味着:

    • 非假日:2019年3月28日星期四(如果作业运行,则应在该时间运行) 之前 (假日)
    • 假期:2019年3月29日星期五
    • 假期:2019年3月30日星期六
    • 假日:2019年3月31日星期日
    • 非假日:2019年4月1日星期一(如果作业运行,则应在该时间运行) 之后 (假日)

    实现这一点的一种方法是每天运行作业,分析当天是否应该运行,必要时重新触发,但有更好的方法吗?

    使现代化

    如果我必须每天触发作业,为什么不使用JavaEE8呢 TimerService ?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Rakesh    7 年前

    例如,我建议在每个工作日使用Cron表达式运行它(在每个工作日的下午5点运行)

    0 00 17 * * MON-FRI
    

    在Cron表达式调用的函数中,可以调用holidayService。isHoliday(日期),它将显示该日期是否为假日。如果是假日,那么你可以跳过运行报告。

        2
  •  0
  •   capitano666    6 年前

    当我不得不安排第三个工作日到最后一个工作日时,我也遇到了类似的问题,经过一些研究,结果证明这是正确的字符串:

    0 45 20 L-3W * ? *
    

    “L-3W”的意思是“最后一个工作日(周一至周五)之前的第三天”