項目開發中常常須要執行一些定時任務,好比須要在天天凌晨時候,分析一次前一天的日誌信息。Spring爲咱們提供了異步執行任務調度的方式,提供TaskExecutor 、TaskScheduler 接口。java
兩個註解:@EnableScheduling、@Scheduledspring
cron表達式是定時任務中比較重要的定義字符串,咱們須要瞭解其特色才能更好的使用異步任務。springboot
在springboot中,cron表達式是空格分離的6位時間串,分別對應以下:異步
second, minute, hour, day of month, month and day of week
即「秒 分 時 天 月 星期」。測試
字段 | 容許值 | 容許的特殊字符 |
---|---|---|
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
小時 | 0-23 | , - * / |
日期 | 1-31 | , - * ? / L W C |
月份 | 1-12 | , - * / |
星期 | 0-7或SUN-SAT | 0,7是SUN , - * ? / L C # |
特殊字符 | 表明含義 |
---|---|
, | 枚舉 |
- | 區間 |
* | 任意 |
/ | 步長 |
? | 日/星期衝突匹配 |
L | 最後 |
W | 工做日 |
C | 和calendar聯繫後計算過的值 |
# | 星期,4#2,第2個星期四 |
英文 | 縮寫 | |
---|---|---|
星期一 | Monday | Mon |
星期二 | Tuesday | Tues |
星期三 | Wednesday | Wed |
星期四 | Thursday | Thur/Thurs |
星期五 | Friday | Fri |
星期六 | Saturday | Sat |
星期日 | Sunday | Sun |
若是以爲縮寫很差記住,也可使用0-7來表示星期範疇:0和7表明星期日,1-6表明星期一至星期六。日誌
咱們寫一個service方法,讓其每秒都打印一個在控制檯dingdong字符串:code
@Scheduled(cron = "* * * * * *") public void dingDong(){ System.out.println("ding dong..."); }
別忘了在啓動類處開啓定時任務註解@EnableScheduling.接口
如下列出一些經常使用的cron表達式提供參考開發
// 任意:每秒執行 @Scheduled(cron = "* * * * * *") // 星期:週一至週五每分鐘執行 @Scheduled(cron = "0 * * * * WED-FRI") // 枚舉:每分鐘的0,1,2,3秒執行 @Scheduled(cron = "0,1,2,3 * * * * *")@ // 區間:每分鐘的0,1,2,3秒執行 @Scheduled(cron = "0-3 * * * * *") // 步長:每隔4秒執行一次 @Scheduled(cron = "0/4 * * * * *") // 每月的週一至週六12:30執行一次 @Scheduled(cron = "0/4 30 12 ? * 1-6") // 每月的最後一週週六凌晨2點執行一次 @Scheduled(cron = "0 0 2 ? * 6L") // 每月的最後一個工做日凌晨2點執行一次 @Scheduled(cron = "0 0 2 LW * ?") // 每月的第一個週一凌晨2點到4點間,每一個整點執行一次 @Scheduled(cron = "0 0 2-4 ? * 1#1")