【Spring Boot】23.定時任務

簡介

項目開發中常常須要執行一些定時任務,好比須要在天天凌晨時候,分析一次前一天的日誌信息。Spring爲咱們提供了異步執行任務調度的方式,提供TaskExecutor 、TaskScheduler 接口。java

兩個註解:@EnableScheduling、@Scheduledspring

cron表達式

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表明星期一至星期六。日誌

使用方式

  1. 開啓定時任務註解@EnableScheduling
  2. 爲方法添加定時任務註釋@Scheduled

測試

咱們寫一個service方法,讓其每秒都打印一個在控制檯dingdong字符串:code

service/HelloService.class
@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")
相關文章
相關標籤/搜索