java - 如何在上一个或下一个工作日运行 Quartz Scheduler

标签 java jakarta-ee quartz-scheduler

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/

相关文章:

java - 套接字输入流在最终读取时挂起。处理这个的最佳方法?

java - 维护 Action 变量的值?

java - 是否可以返回资源中的父类(super class)列表并在客户端接收适当的子类? (使用轻松)

java - Spring Hello World 在 Eclipse 中的设置和代码

java - 我的程序没有以执行器返回/结束

java - Android SQLite 创建具有加密列名的表

java - 尝试连接到MySQL时出现NullPointerException

java - Web 应用程序中的 Quartz

java - Quartz调度器通过FTP下载文件

java - Amazon EC2 - Quartz 和作业未在正确的时间运行