在我們平時開發的項目中,定時任務基本屬於必不可少的功能,那大家都是怎么做的呢?但我知道的大多都是靜態定時任務實現。
基於注解來創建定時任務非常簡單,只需幾行代碼便可完成。實現如下:
@Configuration
@EnableScheduling
public class SimpleScheduleTask {
//10秒鍾執行一次
@Scheduled(cron = "0/10 * * * * ?")
private void tasks() {
System.out.println("【定時任務】 每10秒執行一次!");
}
}
Cron表達式參數分別表示(從左到右):
秒(0~59) 如0/5表示每5秒
分(0~59)
時(0~23)
日(0~31) 月的某一天
月(0~11)
周幾( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT)
就上面幾行代碼,就能搞定一個定時任務。顯然,使用Scheduled 確實特別的方便,但有很大的缺點和局限,就是當我們調整了執行計划的時間時,需要重啟服務才能生效,這就有些不方便。為了達到實時生效的效果,可以通過數據庫來動態實現定時任務。
基於數據庫的動態定時任務實現
將定時任務配置在數據庫,啟動項目的時候,用mybatis讀取數據庫,實例化對象,並設定定時任務。如果需要新增,減少,修改定時任務,僅需要修改數據庫資料,並重啟項目即可,無需改代碼。
數據庫配置
運行的結果
這樣我們可以通過直接修改數據庫,執行周期就會改變,並且不需要我們重啟應用,十分方便。
推薦閱讀:
Java中大量if...else語句的消除替代方案
Java8中遍歷Map的常用四種方式
推薦一些MySQL優化技巧,效率提升不止十倍!
掃碼關注公眾號,發送關鍵詞獲取相關資料:
-
發“Springboot”領取電商項目實戰源碼;
-
發“SpringCloud”領取學習實戰資料;