Here是Spring Crontab语法的文档。
我想在每个工作日的14:40、14:45、14:50、14:55和15:00运行一个任务,但是我不知道如何使用Crontab模式来表达它。到目前为止,我想出的最接近的是:
0 40/5 14 * * MON-FRI
但这不能在15:00运行。
这完全可以用Crontab模式表达吗?
答案 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