您好,我正在使用下面的 SpringBoot cron 表达式每天运行我的预定作业两次。应该在上午 10 点和下午 4 点运行
@Scheduled(cron = "0 0 10,16 * * *")
Run Code Online (Sandbox Code Playgroud)
我在下午 3:30 启动了 Springboot 应用程序,它在下午 4 点触发了预定的作业,但第二天上午 10 点它没有触发作业
我上面的 cron 表达式有什么问题吗?请注意,这不是 unix cron 表达式。根据 SpringBoot 文档,它只需要 6 个参数。
cron 表达式是正确的。应该还有其他问题导致您的 cron 作业无法按预期运行。
在内部,Spring 用于CronSequenceGenerator为 cron 表达式生成下一个触发时间。为了证明你的 cron 表达式配置正确,你可以尝试使用CronSequenceGenerator.
例如,以下函数将简单地打印出 cron 表达式的下 10 个触发时间:
public static void printNextTriggerTime(String cronExpression, LocalDateTime currentTime) {
CronSequenceGenerator generator = new CronSequenceGenerator(cronExpression);
Date d = Date.from(currentTime.atZone(ZoneId.systemDefault()).toInstant());
for (int i = 0; i < 10; i++) {
d = generator.next(d);
System.out.println(d);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我输入你的 cron 表达式和开始时间:
printNextTriggerTime("0 0 10,16 * * *", LocalDateTime.of(2019, 8, 20, 15, 30, 0));
Run Code Online (Sandbox Code Playgroud)
它将输出:
Tue Aug 20 16:00:00 HKT 2019
Wed Aug 21 10:00:00 HKT 2019
Wed Aug 21 16:00:00 HKT 2019
Thu Aug 22 10:00:00 HKT 2019
Thu Aug 22 16:00:00 HKT 2019
Fri Aug 23 10:00:00 HKT 2019
Fri Aug 23 16:00:00 HKT 2019
Sat Aug 24 10:00:00 HKT 2019
Sat Aug 24 16:00:00 HKT 2019
Sun Aug 25 10:00:00 HKT 2019
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3421 次 |
| 最近记录: |