在前面的文章中,我們已實現了基於內存動態管理 Quartz 任務
本章將實現對任務信息及狀態持久化至數據庫。
目標
整合 Quartz,基於 mysql 實現對 Quartz 任務增刪查改、暫停及恢復
思路
任務管理完全委託 Scheduler 類進行操作,所以使用內存進行存儲與使用數據庫進行存儲,只是在存儲策略上的一個改變,這並不影響我們的操作,所以,本章與上一章中的操作部分代碼,完全一樣。
SpringBoot 提供的 QuartzAutoConfiguration 已經為我們進行了封裝,所以只需要設置數據源並修改 JobStoreType 參數為 jdbc 即可
實戰
第一步:初始化數據庫
Quartz 已經為不同數據庫準備了初始化腳本,腳本路徑為 org/quartz/impl/dbcjobstore,腳本名稱為 tables_@@platform@@.sql,其中 platform 會使用數據庫名稱替換。
因為本章使用 mysql 數據庫作為示例,搜索 tables_mysql_innodb.sql 文件,在數據庫中執行。
第二步:添加依賴
引入 Spring Boot Starter 父工程
添加 spring-boot-starter-quartz、jpa 及 mysql 的依賴,添加後的整體依賴如下
第三步:配置
- 配置數據源
- 配置 Jpa
- 配置 Quartz,job-store-type 設置為 jdbc,表示使用數據庫進行數據存儲
第四步:編寫定時任務執行類
需要繼承 QuartzJobBean 類
第四步:實現增刪查改
對任務的增刪查改都是基於 Scheduler 類,SpringBoot 自帶的 QuartzAutoConfiguration 對其進行了註冊。
對任務的增刪查改操作使用工具類 QuartzUtils 來進行實現。
編寫 QuartzUtils 工具類
第五步:驗證
- 創建任務
請求地址 http://localhost:8080/add?job=job1&name=user&cron=0/5 * * * * ?,創建一個名稱為 job1 的任務,每五秒執行一次查看日誌
<code>execute timeJob at 06:14:39: hello user
execute timeJob at 06:14:44: hello user
execute timeJob at 06:14:49: hello user/<code>
- 修改任務
請求地址 http://localhost:8080/add?job=job1&name=user&cron=0/1 * * * * ?,修改名稱為 job1 的任務,變為每秒執行一次查看日誌
<code>execute timeJob at 06:14:55: hello user
execute timeJob at 06:14:56: hello user
execute timeJob at 06:14:57: hello user/<code>
- 暫停和重啟任務
請求地址 http://localhost:8080/pause?job=job1,暫停任務job1
請求地址 http://localhost:8080/resume?job=job1,重啟任務job1
源碼地址
本章源碼 : https://gitee.com/gongm_24/spring-boot-tutorial.git
閱讀更多 死牛胖子的技術隨筆 的文章