我正在尝试在Spring安排一项每天午夜运行的任务。我按照Spring的official guide编写了调度程序类,如下所示:
@Component
public class OverduePaymentScheduler {
@Scheduled(cron = "0 0 0 * * *")
public void trackOverduePayments() {
System.out.println("Scheduled task running");
}
}
然而,当时钟到达12点时,任务不会运行。我从这个link的石英调度程序的文档中得到了cron表达式。
如果将cron表达式更改为每10秒运行一次的“* / 10 * * * * *”,则调度程序执行正常。
那么我做错了什么?
答案 0 :(得分:24)
这些是cron表达式的有效格式:
0 0 * * * *
=每天每小时的最高点。*/10 * * * * *
=每十秒钟。0 0 8-10 * * *
=每天8点,9点和10点。0 0 6,19 * * *
=每天早上6:00和晚上7:00。0 0/30 8-10 * * *
=每次8:00,8:30,9:00,9:30,10:00和10:30
一天。0 0 9-17 * * MON-FRI
=工作日的9到5小时0 0 0 25 12 ?
=每个圣诞节午夜模式是:
second, minute, hour, day, month, weekday
所以你的答案是:
0 0 0 * * *
答案 1 :(得分:12)
我终于使用了这个cron表达式# $val_1 = KOREA
# $val_2 = OTL
# awk /$val_1|$val_2/'print{$1, $val_1, $val_2}' sample.log
,但是我必须像这样在调度程序类中设置时区。
0 0 0 * * *
答案 2 :(得分:9)
请在每天上午12:00使用以下cron模式:
// at 12:00 AM every day
@Scheduled(cron="0 0 0 * * ?")
我已经在这个网站上检查了你的cron模式:http://www.cronmaker.com/。
它将模式0 0 0 * * *
视为无效。
答案 3 :(得分:3)
答案 4 :(得分:1)
对于 spring 5.3 或更高版本的用户,我们有一个更简单的定义 cron 的方法
宏 | 含义 |
---|---|
@yearly (or @annually) |
一年一次 (0 0 0 1 1 *) |
@monthly |
每月一次 (0 0 0 1 * *) |
@weekly |
每周一次 (0 0 0 * * 0) |
@daily (or @midnight) |
一天一次 (0 0 0 * * *) |
@hourly |
每小时一次,(0 0 * * * *) |
参考:https://spring.io/blog/2020/11/10/new-in-spring-5-3-improved-cron-expressions