Spring @Scheduled 的 Cron Expression 包含秒

Spring 的 Annotation @Scheduled 有 6 個 fields, 其中第一個 field 是秒鐘 (Second)。不同於 Linux 上的 cron job 只有 5 個控制時間的 fields, 不包括秒鐘。

記得以前在了解 Spring 如何運行定期任務時,看到同事寫的 Cron Expression,感覺有些不對勁,怎麼好像有問題似的?

一查才發現,原來 Spring 的 @Scheduled 的 Cron Expression 與 Linux 上的 Cron Expression 有所區別。

Linux 上的 Syntax

Linux Cron Syntax

1
2
3
4
5
6
7
8
9
 ┌───────────── minute (0 - 59)
 │ ┌───────────── hour (0 - 23)
 │ │ ┌───────────── day of the month (1 - 31)
 │ │ │ ┌───────────── month (1 - 12)
 │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
 │ │ │ │ │                                   7 is also Sunday on some systems)
 │ │ │ │ │
 │ │ │ │ │
 * * * * * <command to execute>

來源:維基百科

Spring 的 @Scheduled

Spring Cron Syntax

1
2
3
4
5
6
7
8
9
 ┌───────────── second (0-59)
 │ ┌───────────── minute (0 - 59)
 │ │ ┌───────────── hour (0 - 23)
 │ │ │ ┌───────────── day of the month (1 - 31)
 │ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC)
 │ │ │ │ │ ┌───────────── day of the week (0 - 7)
 │ │ │ │ │ │          (0 or 7 is Sunday, or MON-SUN)
 │ │ │ │ │ │
 * * * * * *

來源:Spring 官方網站

兩者的區別在於,Spring 的註解 @Scheduled 有 6 個欄位,其中第一個欄位是秒。而 Linux 上的 cron job 則只有 5 個控制時間的欄位,不包括秒。

如果使用 quartz,還可以控制年份

References

comments powered by Disqus