cron 表达式的含义 0 * * * * *

Pan*_*mar 1 cron spring-boot

我想知道这个表达的含义

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

我认为这意味着调度程序预计每秒运行一次。有人可以向我证实这一点吗?

@Scheduled(cron = "0 * * * * *")
Run Code Online (Sandbox Code Playgroud)

Ken*_*han 5

更准确地说,您可以使用CronSequenceGeneratorcron 表达式来验证执行时间。Spring内部使用该对象来计算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)

所以,如果我输入:

printNextTriggerTime("0 * * * * *", LocalDateTime.of(2019, 8, 20, 15, 30, 0));
Run Code Online (Sandbox Code Playgroud)

它将输出:

Tue Aug 20 15:31:00 HKT 2019
Tue Aug 20 15:32:00 HKT 2019
Tue Aug 20 15:33:00 HKT 2019
Tue Aug 20 15:34:00 HKT 2019
Tue Aug 20 15:35:00 HKT 2019
Tue Aug 20 15:36:00 HKT 2019
Tue Aug 20 15:37:00 HKT 2019
Tue Aug 20 15:38:00 HKT 2019
Tue Aug 20 15:39:00 HKT 2019
Tue Aug 20 15:40:00 HKT 2019
Run Code Online (Sandbox Code Playgroud)

这意味着0 * * * * *将每分钟运行一次,但不会每秒运行一次。