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 ?
最佳答案
我建议使用 Cron Expression 在每个工作日运行它(例如,每个工作日下午 5 点运行)
0 00 17 * * MON-FRI
并且在由 Cron 表达式调用的函数内,您可以调用 HolidayService.isHoliday(date) 来判断该日期是否是假期。如果是假期,那么您可以跳过运行报告。
关于java - 如何在上一个或下一个工作日运行 Quartz Scheduler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55299551/