春季Crontab模式:每个工作日的特定时间

时间:2020-06-01 17:24:17

标签: java linux spring unix cron

Here是Spring Crontab语法的文档。

我想在每个工作日的14:40、14:45、14:50、14:55和15:00运行一个任务,但是我不知道如何使用Crontab模式来表达它。到目前为止,我想出的最接近的是:

0 40/5 14 * * MON-FRI

但这不能在15:00运行。

这完全可以用Crontab模式表达吗?

1 个答案:

答案 0 :(得分:0)

您需要将其拆分为两个表达式:

0 40-55/5 14 * * MON-FRI
0 0 15 * * MON-FRI

如果您只想使用一个表达式,并且可以在一天中的最后一次触发时间没问题的情况下运行一分钟,则可以使用:

0 40-55/5,59 14 * * MON-FRI

Spring内部使用CronSequenceGenerator为cron表达式生成下一个触发时间。您可以使用它来验证cron表达式。

例如,要验证0 40-55/5,59 14 * * MON-FRI的下几个触发时间:

CronSequenceGenerator generator = new CronSequenceGenerator("0 40-55/5,59 14 * * MON-FRI");

Date d = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
for (int i = 0; i < 10; i++) {
    d = generator.next(d);
    System.out.println(d);
}

将打印出来:

Tue Jun 02 14:40:00 HKT 2020
Tue Jun 02 14:45:00 HKT 2020
Tue Jun 02 14:50:00 HKT 2020
Tue Jun 02 14:55:00 HKT 2020
Tue Jun 02 14:59:00 HKT 2020
Wed Jun 03 14:40:00 HKT 2020
Wed Jun 03 14:45:00 HKT 2020
Wed Jun 03 14:50:00 HKT 2020
Wed Jun 03 14:55:00 HKT 2020
Wed Jun 03 14:59:00 HKT 2020
相关问题