@Scheduled註解

1 概述

@Scheduled註解是spring boot提供的用於定時任務控制的註解,主要用於控制任務在某個指定時間執行,或者每隔一段時間執行.注意需要配合@EnableScheduling使用,配置@Scheduled主要有三種配置執行時間的方式,cron,fixedRate,fixedDelay.

2 cron

cron是@Scheduled的一個參數,是一個字符串,以5個空格隔開,只允許6個域(注意不是7個,7個直接會報錯),分別表示秒,分,時,日,月,周.

單位 允許值 允許通配符
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * / ? L W
1-12 或 JAN-DEC(大小寫均可) , - * / ?
1-7 或 SUN-SAT(大小寫均可) , - * / ? L #

2.1 cron通配符

符號 含義
* 所有值.在秒字段上表示每秒執行,在月字段上表示每月執行
? 不指定值,不需要關係當前指定的字段的值,比如每天都執行但不需要關心周幾,就可以把周的字段設爲?
- 區間,如秒的0-2,表示0秒,1秒,2秒都會觸發
, 多個值,比如在0秒,20秒,25秒觸發,可以把秒的字段設爲0,20,25
/ 遞增觸發,比如秒的字段上設0/3,從第0秒開始,每隔3秒觸發
L 最後,只允許在日字段或周字段上,在日字段上使用L表示當月最後一天,在周字段上使用3L表示該月最後一個週四
W 只允許用在日字段上,表示距離最近的該日的工作日.工作日指的是週一至週五
# 只允許在周字段上,表示每月的第幾個周幾,如2#3,每月的第3個週二

2.2 cron示例

@Scheduled(cron = "0 * * * 1 SAT") //每年的1月的所有周六的所有0秒時間執行
@Scheduled(cron = "0 0 0 1 Jan ?") //每年的1月的1日的0時0分0秒執行

cron支持佔位符,若在配置文件中有

cron = 2 2 2 2 2 ?

@Scheduled(cron = "${cron}")

表示每年的二月二號的兩時兩分兩秒執行.

3 fixedRate

3.1 fixedRate

fixedRate表示自上一次執行時間之後多長時間執行,以ms爲單位.

@Scheduled(fixedRate = 1000 * 5)

自上次執行之後5秒再執行.

3.2 fixedRateString

有一個類似的參數叫fixedRateString,是字符串的形式,支持佔位符.

@Scheduled(fixedRateString = "1000")

自上次執行1秒再執行.
若在配置文件中有相應的屬性,可以用佔位符獲取屬性,如在application.properties中有

interval=2000

可以使用

@Scheduled(fixedRateStirng="${interval}")

表示2秒間隔.

4 fixedDelay

4.1 fixedDelay

fixedDelay與fixedRate有點類似,不過fixedRate是上一次開始之後計時,fixedDelay是上一次結束之後計時,也就是說,fixedDelay表示上一次執行完畢之後多長時間執行,單位也是ms.

@Scheduled(fixedDelay = 1000 * 3600 * 12) //上一次執行完畢後半天後再次執行

4.2 fixedDelayString

與fixedRateString類似,也是支持佔位符

@Scheduled(fixedDelayString = "${fixedDelay}")

5 initialDelay

5.1 initialDelay

initialDelay表示首次延遲多長時間後執行,單位ms,之後按照cron/fixedRate/fixedRateString/fixedDelay/fixedDelayString指定的規則執行,需要指定其中一個規則.

@Scheduled(initialDelay=1000,fixedRate=1000) //首次運行延遲1s

5.2 initialDelayString

與initialDelay類似,不過是字符串,支持佔位符.

@Scheduled(initialDelayString = "${initialDelay}",cron = "0 0 0 14 4 ?") 
//按照配置文件initialDelay指定的時間首次延遲,並於每年4月14日0時0分0秒執行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章