定時任務Schedule
異步任務Async
cron表達式
spring自帶了定時任務、異步任務,springboot中自然也包含了進來,此處主要介紹在springboot中的使用。
定時任務、異步任務是spring|spring自帶的,不需要額外添加依賴。
1、引導類上加 @EnableScheduling
2、yml中配置定時任務的線程池
一個線程執行一個定時任務,如果線程數不夠,會出現部分定時任務沒有可用線程來執行的情況。
springboot的定時任務、異步任務都是使用單獨的線程池,如果公司有線程池使用規範或覺得内置的線程池不滿足需求,可以使用自定義的線程池。
3、編寫定時任務
通常會把定時|異步任務抽出來,統一放在單獨的包、類中,友善維護
異步任務可分為2類
不需要傳回資料:比如處理日志、發送郵件、短信…
需要傳回資料:比如使用者支付訂單要校驗庫存、使用者餘額、風控…都沒有問題才允許支付訂單
異步任務都是啟動一條新線程來執行,不阻塞目前線程,可以提高效率。
1、引導類上加 @EnableAsync
2、yml中配置異步任務的線程池
3、編寫異步任務
一個異步任務對應一個方法,是以又叫做異步方法
注意點
異步任務會作為 Future 送出給線程池執行,是以異步任務的傳回值隻能是 void 或 Future
異步任務不能使用 private 或 static 修飾,不然線上程池中調用不了
異步任務不能與調用方在同一個類中,通常是把異步任務寫在單獨的包、類中,友善維護
4、使用異步任務
一共7個字段,依次是
second:0-59
minute:0-59
hour:0-23
day of month:1-31
month:1-12
day of week:1-7
year:1970-2099
前6個必填,第7個選填、可以預設。
使用示例