1. 程式人生 > >Spring Task服務啟動後就執行且每隔50分鐘執行一次的實現方案

Spring Task服務啟動後就執行且每隔50分鐘執行一次的實現方案

題目有點唬人,其實很簡單。直接看下面配置吧!

<task:scheduled-tasks>
   <task:scheduled ref="mpAccessTokenRefreshTimer" method="refresh" fixed-rate="3000000" />
   <task:scheduled ref="noDataReportTimer" method="updateStatus" cron="0 0 9 * * ?" />
</task:scheduled-tasks>

哈哈,看出來了嗎?cron表示式可以指定執行時間,也可以指定間隔時間,但cron配置的間隔時間有侷限性。就是沒辦法保證服務啟動後立即執行。另外如果間隔時間不一定準確。比如要求每隔50分鐘執行一次,則cron="0 */50 * * * ?",但實際上這種cron表示式的配置每到整點都會執行。也就是實際的執行情況如下:

18:50、19:00、19:50、20:00、20:50、21:00

顯然這不是我們想要的結果。那麼如何實現呢?用另一個屬性fixed-rate,當然這個值是毫秒單位的,所以50分鐘就是3000000

測試一下,執行情況如下:

18:41、19:31、20:21、21:11
顯然這是我們想要的結果。但為什麼是18:41開始執行呢,當然是因為現在是18:41,服務啟動定時任務會立即執行啊。當然你也可以延遲執行,再配個屬性 initial-delay="首次執行延遲毫秒數" 就行了。

fixed-rate和cron組合起來使用行不行?我沒試過,你可以試試,試完告訴我!