Spring 的 Annotation @Scheduled 有 6 個 fields, 其中第一個 field 是秒鐘 (Second)。不同於 Linux 上的 cron job 只有 5 個控制時間的 fields, 不包括秒鐘。
記得以前在了解 Spring 如何運行定期任務時,看到同事寫的 Cron Expression,感覺有些不對勁,怎麼好像有問題似的?
一查才發現,原來 Spring 的 @Scheduled
的 Cron Expression 與 Linux 上的 Cron Expression 有所區別。
Linux 上的 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
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