java - Quartz Cron 表达式用于从给定时间开始每 5 小时运行一次作业

标签 java cron quartz-scheduler

我正在使用 Quartz 库进行调度。我必须从给定时间开始每 5 小时(可能会变化)安排一项工作。

我尝试使用以下表达式 -

0 0 12/5 1/1 * ? *

我检查了 future 运行的输出 Cronmaker

安排开始时间 -> 2017 年 6 月 21 日星期二上午 10:30

future 运行 -

  1. 2017 年 6 月 21 日星期三中午 12:00
  2. 2017 年 6 月 21 日星期三下午 5:00
  3. 2017 年 6 月 21 日星期三晚上 10:00
  4. 2017 年 6 月 22 日星期四中午 12:00

该表达式执行了所要求的操作,但我希望除了第 3 次运行之外,第 4 次运行还有 5 个小时,即类似的内容 -

  1. 2017 年 6 月 21 日星期三中午 12:00
  2. 2017 年 6 月 21 日星期三下午 5:00
  3. 2017 年 6 月 21 日星期三晚上 10:00
  4. 2017 年 6 月 22 日星期四凌晨 3:00

第四次运行将在第二天中午 12:00 触发。我希望将其添加到上次运行的时间中。 有什么方法可以通过 cron 表达式来实现这一点吗?

最佳答案

CronSchedule 并不是最适合您想要执行的操作。

改用SimpleSchedule:

trigger = newTrigger()
    .withIdentity("yourJobName", "yourJobGroup")
    .withSchedule(simpleSchedule()
        .withIntervalInHours(5) // every 5 hours
        .repeatForever()) // keep going in intervals of 5h
    .startAt(dateOf(12, 0, 0)) // start at 12:00 PM
    .build();

您可以在 official documentation 中找到更多示例.

关于java - Quartz Cron 表达式用于从给定时间开始每 5 小时运行一次作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44620400/

相关文章:

java - Quartz 的配置参数可以在默认属性文件之外外部化吗?

java - 测量使用 Java 套接字传输文件时使用的带宽

java - 如何使用 Spring MVC 处理未知数量的参数

mysql - 在 Linux 中使用 SQL 输出发送自动电子邮件

perl - Cron 没有在 PERL 中执行我的 system() 语句

java - quartz 工作比。立即执行一次性任务的线程

java - jackson 抛出 nosuchmethod 错误

java - 如何使用 @ImportResource 导入 src/main/resources/static 中的整个配置文件目录?

mysql - 通过 crontab 调度程序运行时 MySQL 重启的问题

java - 消息队列或调度程序