SpingBoot @Scheduled定時任務

我就吃最后一口發表於2024-05-15

現在有每天抽資料,統計資料的需求,雖然說我有點理解不了 記錄 每個部門 的 銷售評審流程 的 平均處理時長 這個資料有什麼意義。碼農?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秒觸發一次事件

? :不指定值

​ 只能用在DayofMonthDayofWeek兩個域,兩者互斥,須對其一設定

fixedRate

@Schedule中的屬性,用於指定任務執行的時間間隔(單位為毫秒),表示以固定的頻率執行某個方法或任務

eg:如果設定為1s,任務將每隔1s執行一次,每次任務執行開始後等待1s再執行下一次

fixedRate從上一次方法執行開始的時間算起,如果上一次方法執行時間超過了間隔時間,那上一次任務執行完之後,立即執行下一個任務

fixedDelay

@Schedule中的屬性,用於指定任務執行之間的延遲時間(單位為毫秒),表示以固定的時間間隔執行某個方法或任務,並在每次執行完成後等待指定的延遲時間再執行下一次

eg:如果設定為1s,任務將每隔1s執行一次,每次任務執行完成後等待1s再執行下一次

fixedDelay從上一次方法執行完成的時間算起,如果上一次方法執行阻塞住了,會等到上一次方法執行完,並等待給定間隔時間之後執行下一次

開啟非同步來執行定時任務

1、在啟動類上新增註解@EnableAsync

2、定時任務上新增@Async

開啟非同步後,每個任務都會從執行緒池裡分配一個執行緒來執行,避免耗時長的任務影響到其他任務

相關文章