Spring 调度 - 每天午夜的 Cron 表达式不起作用?
Spring Scheduling - Cron expression for everyday at midnight not working?
我正在尝试在 Spring 中安排一项任务,即每天 运行 午夜。我遵循了 Spring 中的 official guide 并制作了调度程序 class 如下:
@Component
public class OverduePaymentScheduler {
@Scheduled(cron = "0 0 0 * * *")
public void trackOverduePayments() {
System.out.println("Scheduled task running");
}
}
但是,当时钟指向凌晨 12 点时,任务不会 运行。我从 link.
的石英调度程序文档中获得了 cron 表达式
如果我将 cron 表达式更改为“*/10 * * * * *”,即每 10 秒 运行 秒,调度程序将正常执行。
那我做错了什么?
请在每天 12:00 上午使用以下 cron 模式:
// at 12:00 AM every day
@Scheduled(cron="0 0 0 * * ?")
我已经在这个网站上检查了你的 cron 模式:http://www.cronmaker.com/。
它说模式 0 0 0 * * *
无效。
这些是 cron 表达式的有效格式:
0 0 * * * *
= 每天每个小时的顶部。
*/10 * * * * *
= 每十秒一次。
0 0 8-10 * * *
= 每天8点、9点、10点。
0 0 6,19 * * *
= 6:00 AM 和 7:00 PM 每天。
0 0/30 8-10 * * *
= 8:00、8:30、9:00、9:30、10:00 和 10:30 每个
天.
0 0 9-17 * * MON-FRI
= 工作日朝九晚五整点
0 0 0 25 12 ?
= 每个圣诞节午夜
模式是:
second, minute, hour, day, month, weekday
所以你的答案是:
0 0 0 * * *
我终于让它与这个 cron 表达式一起工作 0 0 0 * * *
但我必须像这样在调度程序 class 中设置时区。
@Scheduled(cron = "0 0 0 * * *",zone = "Indian/Maldives")
您可以使用以下格式来满足您的要求:
0 0 23 * * *
因为 Quartz 配置的小时从 0 到 23。
您可以参考此 link 了解更多信息。
对于spring 5.3 或以上的用户,我们有更简单的方法来定义 crons
Macro
Meaning
@yearly (or @annually)
once a year (0 0 0 1 1 *)
@monthly
once a month (0 0 0 1 * *)
@weekly
once a week (0 0 0 * * 0)
@daily (or @midnight)
once a day (0 0 0 * * *)
@hourly
once an hour, (0 0 * * * *)
参考:https://spring.io/blog/2020/11/10/new-in-spring-5-3-improved-cron-expressions
我正在尝试在 Spring 中安排一项任务,即每天 运行 午夜。我遵循了 Spring 中的 official guide 并制作了调度程序 class 如下:
@Component
public class OverduePaymentScheduler {
@Scheduled(cron = "0 0 0 * * *")
public void trackOverduePayments() {
System.out.println("Scheduled task running");
}
}
但是,当时钟指向凌晨 12 点时,任务不会 运行。我从 link.
的石英调度程序文档中获得了 cron 表达式如果我将 cron 表达式更改为“*/10 * * * * *”,即每 10 秒 运行 秒,调度程序将正常执行。
那我做错了什么?
请在每天 12:00 上午使用以下 cron 模式:
// at 12:00 AM every day
@Scheduled(cron="0 0 0 * * ?")
我已经在这个网站上检查了你的 cron 模式:http://www.cronmaker.com/。
它说模式 0 0 0 * * *
无效。
这些是 cron 表达式的有效格式:
0 0 * * * *
= 每天每个小时的顶部。*/10 * * * * *
= 每十秒一次。0 0 8-10 * * *
= 每天8点、9点、10点。0 0 6,19 * * *
= 6:00 AM 和 7:00 PM 每天。0 0/30 8-10 * * *
= 8:00、8:30、9:00、9:30、10:00 和 10:30 每个 天.0 0 9-17 * * MON-FRI
= 工作日朝九晚五整点0 0 0 25 12 ?
= 每个圣诞节午夜
模式是:
second, minute, hour, day, month, weekday
所以你的答案是:
0 0 0 * * *
我终于让它与这个 cron 表达式一起工作 0 0 0 * * *
但我必须像这样在调度程序 class 中设置时区。
@Scheduled(cron = "0 0 0 * * *",zone = "Indian/Maldives")
您可以使用以下格式来满足您的要求:
0 0 23 * * *
因为 Quartz 配置的小时从 0 到 23。 您可以参考此 link 了解更多信息。
对于spring 5.3 或以上的用户,我们有更简单的方法来定义 crons
Macro | Meaning |
---|---|
@yearly (or @annually) |
once a year (0 0 0 1 1 *) |
@monthly |
once a month (0 0 0 1 * *) |
@weekly |
once a week (0 0 0 * * 0) |
@daily (or @midnight) |
once a day (0 0 0 * * *) |
@hourly |
once an hour, (0 0 * * * *) |
参考:https://spring.io/blog/2020/11/10/new-in-spring-5-3-improved-cron-expressions