Spring Scheduling - 每天午夜的Cron表达不起作用?

时间:2017-07-16 03:45:25

标签: spring spring-boot cron spring-data-rest

我正在尝试在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 * * * * *”,则调度程序执行正常。

那么我做错了什么?

5 个答案:

答案 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)

您可以使用以下格式满足您的要求:

0 0 23 * * *

因为对于Quartz配置,时间从0到23开始。 您可以参考此link以获得更多信息。

答案 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