SpringBoot整合Scheduled(定時任務器)
- 2019 年 12 月 2 日
- 筆記
原文:http://mrw.so/57DDRR
Scheduled 定時任務器:是Spring3.0以後自帶的一個定時任務器。我們來看下在SpringBoot中我們怎麼使用
一、項目使用
1.創建項目添加依賴
創建一個SpringBoot項目,並添加如下依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.1.7.RELEASE</version> </dependency></dependencies>
2.創建定時任務
創建定時任務的java類,具體如下:
@Componentpublic class SchedueldDemo { @Scheduled(cron = "0/2 * * * * ?") public void doSome(){ System.out.println("定時任務執行了:"+new Date()); }}
3.啟動器開始設置
在啟動器頭部開啟@EnableScheduling註解
@SpringBootApplication@EnableScheduling public class SpringBootSchedueldDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringBootSchedueldDemoApplication.class, args); } }
啟動後控制台如下:

二、cron 表達式介紹
Cron 表達式是一個字元串,分為 6 或 7 個域,每一個域代表一個含義 Cron 有如下兩種語法格式:
Seconds Minutes Hours Day Month Week Year Seconds Minutes Hours Day Month Week
結構
corn 從左到右(用空格隔開):秒 分 小時 月份中的日期 月份 星期中的日期 年份
各欄位的含義
位置 時間域名 允許值 允許的特殊字元 1 秒 0-59 , – * / 2 分鐘 0-59 , – * / 3 小時 0-23 , – * / 4 日 1-31 , – * / L W C 5 月 1-12 , – * / 6 星期 1-7 , – * ? / L C # 7 年(可選) 1970-2099 , – * / Cron 表達式的時間欄位除允許設置數值外,還可使用一些特殊的字元,提供列表、範圍、通配符等功能,細說如下:
- 星號(*):可用在所有欄位中,表示對應時間域的每一個時刻,例如,在分鐘欄位時,表示「每分鐘」;
- 問號(?):該字元只在日期和星期欄位中使用,它通常指定為「無意義的值」,相當於佔位符;
- 減號(-):表達一個範圍,如在小時欄位中使用「10-12」,則表示從 10 到 12 點,即 10,11,12;
- 逗號(,):表達一個列表值,如在星期欄位中使用「MON,WED,FRI」,則表示星期一,星期三和星期五;
- 斜杠(/):x/y 表達一個等步長序列,x 為起始值,y 為增量步長值。如在分鐘欄位中使用 0/15,則表示為 0,15,30 和 45 秒,而 5/15 在分鐘欄位中表示 5,20,35,50,你也可以使用/y,它等同於 0/y;
- L:該字元只在日期和星期欄位中使用,代表「Last」的意思,但它在兩個欄位中意思不同。L 在日期欄位中,表示這個月份的最後一天,如一月的 31 號,非閏年二月的 28 號;如果 L 用在星期中,則表示星期六,等同於 7。但是,如果 L 出現在星期欄位里,而且在前面有一個數值 X,則表示「這個月的最後 X 天」, 例如,6L 表示該月的最後星期五;
- W:該字元只能出現在日期欄位里,是對前導日期的修飾,表示離該日期最近的工作日。例如 15W 表示離該月 15 號最近的工作日,如果該月 15 號是星期六,則匹配 14 號星期五;如果 15 日是星期日,則匹配 16 號星期一;如果 15 號是星期二,那結果就是 15 號星期二。但必須注意關聯的匹配日期不能夠跨月,如你指定 1W,如果 1 號是星期六,結果匹配的是 3 號星期一,而非上個月最後的那天。W 字元串只能指定單一日期,而不能指定日期範圍;
- LW 組合:在日期欄位可以組合使用 LW,它的意思是當月的最後一個工作日;
- 井號(#):該字元只能在星期欄位中使用,表示當月某個工作日。如 6#3 表示當月的第三個星期五(6表示星期五,#3 表示當前的第三個),而 4#5 表示當月的第五個星期三,假設當月沒有第五個星期三,忽略不觸發;
- C:該字元只在日期和星期欄位中使用,代表「Calendar」的意思。它的意思是計劃所關聯的日期,如果日期沒有被關聯,則相當於日曆中所有日期。例如 5C 在日期欄位中就相當於日曆 5 日以後的第一天。1C 在星期欄位中相當於星期日後的第一天。
Cron 表達式對特殊字元的大小寫不敏感,對代表星期的縮寫英文大小寫也不敏感。
例子:
@Scheduled(cron = 「0 0 1 1 1 ?」)//每年一月的一號的 1:00:00 執行一次@Scheduled(cron = 「0 0 1 1 1,6 ?」) //一月和六月的一號的 1:00:00 執行一次@Scheduled(cron = 「0 0 1 1 1,4,7,10 ?」) //每個季度的第一個月的一號的 1:00:00 執行一次@Scheduled(cron = 「0 0 1 1 * ?」)//每月一號 1:00:00 執行一次@Scheduled(cron=「0 0 1 * * *」) //每天凌晨 1 點執行一次