【问题标题】:How to run a Quartz Scheduler on a previous or next business day如何在前一个或下一个工作日运行 Quartz 调度程序
【发布时间】:2019-03-22 12:24:46
【问题描述】:

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

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

这意味着:

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

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

更新

如果我必须每天触发工作,为什么不改用 Java EE 8 TimerService

【问题讨论】:

  • 我建议保留、Quartz 调度器和业务逻辑分开,并根据 Java 中的逻辑触发作业。我无法理解前一天正在运行的工作?
  • 意思是你每天都会触发作业,并在Java中有一个业务逻辑来查看它是否在当天运行?
  • job is scheduled to run on Friday, 29 March 2019, but it is a holiday. 如果不建议运行,请不要调度。
  • 预定每月运行,正逢节假日,所以才预定

标签: java jakarta-ee quartz-scheduler


【解决方案1】:

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

0 00 17 * * MON-FRI

并且在 Cron 表达式调用的函数中,您可以调用 holidayService.isHoliday(date) 来判断日期是否为假日。如果是假期,那么您可以跳过运行报告。

【讨论】:

  • 如果是假期我不想跳过工作,我想在前一个或下一个工作日运行它
  • 这只是一个想法。如果是假期,您可以相应地安排时间或做任何您想做的事情。
【解决方案2】:

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

0 45 20 L-3W * ? *

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

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多