現在有每天抽資料,統計資料的需求,雖然說我有點理解不了 記錄 每個部門 的 銷售評審流程 的 平均處理時長 這個資料有什麼意義。碼農?malou!
SpringBoot 從1.3.0
版本開始提供對定時任務的支援
準備工作
1、在啟動類上新增@EnableScheduling開啟定時任務
2、在定時任務上新增@Scheduled(所在的類上新增@Component)
3、寫cron表示式或者配置fixedRate/fixedDelay屬性
cron表示式
SpringBoot只支援6位的cron表示式,不支援7位(沒有Year/年)
SpringBoot只支援cron表示式中的專有符號?,其他的反正用不到就不寫了,cron表示式線上生成工具
* | * | * | * | * | * | * | |
---|---|---|---|---|---|---|---|
欄位 | Seconds | Minutes | Hours | DayofMonth | Month | DayofWeek | Year |
含義 | 秒 | 分 | 時 | 日 | 月 | 星期 | 年 |
符號 | , - * / | , - * / | , - * / | , - * / ? | , - * / | , - * / | , - * / ? |
符號解析:
,
:列舉
eg:Seconds中1,5
,表示在第1秒,第5秒的時候觸發事件
-
:範圍
eg:Seconds中1-5
,表示在1秒到5秒,這個區間內每秒都觸發事件
*
:萬用字元
eg:Seconds中使用,表示每一秒都觸發事件
/
:間隔
eg:Seconds中1/5
,表示第1秒觸發一次,後隔5秒觸發一次事件
?
:不指定值
只能用在DayofMonth
和DayofWeek
兩個域,兩者互斥,須對其一設定
fixedRate
@Schedule中的屬性,用於指定任務執行的時間間隔(單位為毫秒),表示以固定的頻率執行某個方法或任務
eg:如果設定為1s,任務將每隔1s執行一次,每次任務執行開始後等待1s再執行下一次
fixedRate從上一次方法執行開始的時間算起,如果上一次方法執行時間超過了間隔時間,那上一次任務執行完之後,立即執行下一個任務
fixedDelay
@Schedule中的屬性,用於指定任務執行之間的延遲時間(單位為毫秒),表示以固定的時間間隔執行某個方法或任務,並在每次執行完成後等待指定的延遲時間再執行下一次
eg:如果設定為1s,任務將每隔1s執行一次,每次任務執行完成後等待1s再執行下一次
fixedDelay從上一次方法執行完成的時間算起,如果上一次方法執行阻塞住了,會等到上一次方法執行完,並等待給定間隔時間之後執行下一次
開啟非同步來執行定時任務
1、在啟動類上新增註解@EnableAsync
2、定時任務上新增@Async
開啟非同步後,每個任務都會從執行緒池裡分配一個執行緒來執行,避免耗時長的任務影響到其他任務