java - 如何在前一个或下一个工作日运行 Quartz 调度程序
问题描述
在本文中,解释了如何排除 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) 来判断日期是否为假日。如果是假期,那么您可以跳过运行报告。
推荐阅读
- python - Python:单击所有可能(更改)的菜单组合
- angular - ngif if 为 false 进入循环
- azureservicebus - 逻辑应用程序:具有并发控制的 ServiceBus 触发器导致 peek-lock 超时
- libpqxx - 将 libpqxx 库添加到 cmake
- mysql - 单表与多表
- c++ - 什么是 int(*)[] 类型
- java - 使用 @ControllerAdvice 处理 Spring 异常提供了集中控制,但我们必须在方法签名中添加所有 throws 异常
- azure - Application Insights 在 Azure 容器的 Web 应用中不起作用
- angular - Angular 5 之后的所有自定义 javascript
不工作 - javascript - Kendo Grid:在 .read() 之后,标头中的选中所有复选框停止工作