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

Cha*_*lie 16 cron spring spring-data-rest spring-boot

我正在尝试在Spring安排一项每天午夜运行的任务.我按照Spring 的官方指南编写了调度程序类,如下所示:

@Component
    public class OverduePaymentScheduler {    

        @Scheduled(cron = "0 0 0 * * *")
        public void trackOverduePayments() {

              System.out.println("Scheduled task running");

        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,当时钟到达12点时,任务不会运行.我在此链接中获得了石英调度程序文档中的cron表达式.

如果我将cron表达式更改为每10秒运行一次的"*/10*****",则调度程序执行正常.

那么我做错了什么?

Rzv*_*van 37

这些是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 =工作日的九点到五点
  • 0 0 0 25 12 ? =每个圣诞节午夜

模式是:

second, minute, hour, day, month, weekday
Run Code Online (Sandbox Code Playgroud)

所以你的答案是:

0 0 0 * * *
Run Code Online (Sandbox Code Playgroud)

  • 我担心这个表达是每天下午12点 (6认同)
  • 用户0 0 0 * * *每个午夜运行 (4认同)

Cha*_*lie 14

我终于使用了这个cron表达式,0 0 0 * * *但是我必须像这样设置调度程序类中的时区. @Scheduled(cron = "0 0 0 * * *",zone = "Indian/Maldives")


Aji*_*man 13

请在每天上午12:00使用以下cron模式:

    // at 12:00 AM every day
    @Scheduled(cron="0 0 0 * * ?")
Run Code Online (Sandbox Code Playgroud)

我在这个网站上检查了你的cron模式:http://www.cronmaker.com/.

它说模式0 0 0 * * *无效.

  • 遗憾的是,cronmaker与Spring cron表达式不兼容。 (3认同)

Ans*_*hul 5

对于 spring 5.3 或更高版本的用户,我们有一个更简单的方法来定义 crons

意义
@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