定時任務之SpringSchedule的注意事項

2022-05-06 04:42:10 字數 1126 閱讀 1644

在我們現在的專案中,或多或少的都會涉及到定時任務,spring在3.0之後引入了springschedule,這讓我們在使用spring的時候,可以很容易的整合springschedule.但是好用歸好用,用的時候還是有一些點注意的.

springschedule 中提供的定時任務,預設是單執行緒執行的,也就是說如果任務較多,或者某乙個任務執行耗時比較久,那麼顯然易見,會很容易導致其餘任務排隊以及阻塞.

既然存在這種問題,那麼怎麼去避免這種問題?這時候大家很容易想到的就是使用執行緒池,多個執行緒去跑定時任務.沒錯,正確的解決方案就是配置執行緒池.

之所以預設是單執行緒執行的,是因為當我們沒有配置taskschedule的時候,預設建立的是乙個單執行緒的執行緒池。具體**解析參考:

先看一下沒配置執行緒池的情況下的任務執行執行緒日誌:

定時任務業務類的**如下:

@component

public class taskconfig

@scheduled(cron = "0/5 * * * * ?")

public void gettask2()

}

任務執行日誌為:

可以看到執行這兩個任務的執行緒總是同乙個執行緒.

那麼我們現在加入執行緒池的配置,配置**如下:

@configuration

public class scheduleconfig implements schedulingconfigurer

//配置執行緒池---觸發器和任務共用的

@bean(destroymethod="shutdown")

public executor taskexecutor()

}

接下來我們再觀察一下定時任務的執行資訊:

現在看到是加入執行緒池後,每次執行的定時任務的執行緒在不斷的變化,同時這兩個任務也可以並行的執行,可以避免任務的阻塞與排隊.

如果你的**中使用了springschedule,而且還沒有使用執行緒池,那麼趕緊去修改吧.

linux定時任務 at定時任務

at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...

springboot任務之定時任務

1 service包下新建scheduleservice類 package com.example.springboottask.service import org.springframework.scheduling.annotation.scheduled import org.springf...

springboot任務之定時任務

在啟動入口上加上 enablescheduling 在需要定時的方法上加上 scheduled註解 比如 package com.gong.spingbootes.service import org.springframework.scheduling.annotation.scheduled i...