定時任務也算是我們日常開發中比較常見的需求了,市面上也有很多成熟的框架:
- quartz
- elastic-job
- xxl-job
- ...
不過小夥伴們知道,其實我們 Spring 框架中也提供了相應的定時任務,這個定時任務通過 @EnableScheduling
註解開啓,松哥之前也寫過文章和大家分享這個註解的基本用法:
不過之前的定時任務都是固定的,提前寫死的,沒法動態配置,前兩天有小夥伴問松哥如何實現定時任務的動態配置?
這個東西要是基於 xxl-job 之類的框架來做其實是比較容易的,不過用 Spring 自帶的 @EnableScheduling
註解其實也能實現,而且並不難,松哥基於此火急火燎的寫了一個,今天先和大家聊聊大致用法,後面抽空再寫一篇文章介紹實現原理。
項目已開源,項目地址:
食用方式
- 克隆項目:
git clone https://github.com/lenve/scheduling.git
。 - 本地數據庫創建一個名爲
scheduling
的庫。 - 修改配置文件
src/main/resources/application.yaml
,主要修改數據庫連接的用戶名和地址。 - 啓動項目。
- 瀏覽器訪問
http://localhost:8080
,可以看到如下頁面:
表示啓動成功。
功能介紹
- 項目啓動時,會自動從數據庫中加載狀態爲 1 的定時任務並開始執行,1 表示處於開啓狀態的定時任務,0 表示處於禁用狀態的定時任務。
- 點擊頁面上的添加作業按鈕,可以添加一個新的定時任務,新任務的 Bean 名稱、方法名稱以及方法參數如果和已有的記錄相同,則認爲是重複作業,重複作業會添加失敗。
添加作業的頁面如下:
這裏涉及到幾個參數,含義如下:
- Bean 名稱:這是項目中注入 Spring 的 Bean 名稱,測試代碼中以
org/javaboy/scheduling02/service/SchedulingTaskDemo.java
爲例。 - 方法名稱:參數 1 中 bean 裏邊的方法名稱。
- 方法參數:參數 2 中方法的參數。
- Cron 表達式:定時任務的 Cron 表達式。
- 作業狀態:開啓和禁用兩種。開啓的話,添加完成後這個定時任務就會開始執行,禁用的話,就單純只是將記錄添加到數據庫中。
作業添加成功提示如下:
作業添加失敗提示如下:
- 點擊作業編輯,可以修改作業的各項數據:
修改後會立馬生效。
- 點擊作業刪除,可以刪除一個現有的作業。假如刪除的作業正在執行,則先停止該作業,然後刪除。
- 點擊列表中的 switch 按鈕也可以切換作業的狀態。
技術棧
- SpringBoot
- Jpa
- MySQL
- Spring Job
- Vue
其他
這是一個學習的 Demo,並非完整項目,後面松哥會出一篇文章和大家分享具體的實現思路。
好啦,先說這麼多。
感興趣的小夥伴趕緊去體驗一把吧: