@Scheduled註解是spring boot提供的用於定時任務控制的註解,主要用於控制任務在某個指定時間執行,或者每隔一段時間執行.注意須要配合@EnableScheduling使用,配置@Scheduled主要有三種配置執行時間的方式,cron,fixedRate,fixedDelay.java
cron是@Scheduled的一個參數,是一個字符串,以5個空格隔開,只容許6個域(注意不是7個,7個直接會報錯),分別表示秒,分,時,日,月,周.spring
單位 | 容許值 | 容許通配符 |
---|---|---|
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
時 | 0-23 | , - * / |
日 | 1-31 | , - * / ? L W |
月 | 1-12 或 JAN-DEC(大小寫都可) | , - * / ? |
周 | 1-7 或 SUN-SAT(大小寫都可) | , - * / ? L # |
符號 | 含義 |
---|---|
* | 全部值.在秒字段上表示每秒執行,在月字段上表示每個月執行 |
? | 不指定值,不須要關係當前指定的字段的值,好比天天都執行但不須要關心周幾,就能夠把周的字段設爲? |
- | 區間,如秒的0-2,表示0秒,1秒,2秒都會觸發 |
, | 多個值,好比在0秒,20秒,25秒觸發,能夠把秒的字段設爲0,20,25 |
/ | 遞增觸發,好比秒的字段上設0/3,從第0秒開始,每隔3秒觸發 |
L | 最後,只容許在日字段或周字段上,在日字段上使用L表示當月最後一天,在周字段上使用3L表示該月最後一個週四 |
W | 只容許用在日字段上,表示距離最近的該日的工做日.工做日指的是週一至週五 |
# | 只容許在周字段上,表示每個月的第幾個周幾,如2#3,每個月的第3個週二 |
@Scheduled(cron = "0 * * * 1 SAT") //每一年的1月的全部週六的全部0秒時間執行
@Scheduled(cron = "0 0 0 1 Jan ?") //每一年的1月的1日的0時0分0秒執行
cron支持佔位符,若在配置文件中有app
cron = 2 2 2 2 2 ?
則ide
@Scheduled(cron = "${cron}")
表示每一年的二月二號的兩時兩分兩秒執行.code
fixedRate表示自上一次執行時間以後多長時間執行,以ms爲單位.
如xml
@Scheduled(fixedRate = 1000 * 5)
自上次執行以後5秒再執行.字符串
有一個相似的參數叫fixedRateString,是字符串的形式,支持佔位符.
如it
@Scheduled(fixedRateString = "1000")
自上次執行1秒再執行.
若在配置文件中有相應的屬性,能夠用佔位符獲取屬性,如在application.properties中有io
interval=2000
能夠使用table
@Scheduled(fixedRateStirng="${interval}")
表示2秒間隔.
fixedDelay與fixedRate有點相似,不過fixedRate是上一次開始以後計時,fixedDelay是上一次結束以後計時,也就是說,fixedDelay表示上一次執行完畢以後多長時間執行,單位也是ms.
@Scheduled(fixedDelay = 1000 * 3600 * 12) //上一次執行完畢後半天後再次執行
與fixedRateString相似,也是支持佔位符
@Scheduled(fixedDelayString = "${fixedDelay}")
initialDelay表示首次延遲多長時間後執行,單位ms,以後按照cron/fixedRate/fixedRateString/fixedDelay/fixedDelayString指定的規則執行,須要指定其中一個規則.
@Scheduled(initialDelay=1000,fixedRate=1000) //首次運行延遲1s
與initialDelay相似,不過是字符串,支持佔位符.
@Scheduled(initialDelayString = "${initialDelay}",cron = "0 0 0 14 4 ?") //按照配置文件initialDelay指定的時間首次延遲,並於每一年4月14日0時0分0秒執行