ApiBoot - ApiBoot Quartz 使用文档
ApiBoot Quartz
ApiBoot內部集成了Quartz,提供了數據庫方式、內存方式的進行任務的存儲,其中數據庫方式提供了分布式集群任務調度,任務自動平滑切換執行節點。
引用ApiBoot Quartz
在pom.xml配置文件內添加,如下配置:
<!--ApiBoot Quartz--> <dependency><groupId>org.minbox.framework</groupId><artifactId>api-boot-starter-quartz</artifactId> </dependency> 復制代碼備注:如果使用ApiBoot Quartz的內存方式,僅需要添加上面的依賴即可。
相關配置
| api.boot.quartz.job-store-type | 否 | memory | 任務存儲源方式,默認內存方式 |
| api.boot.quartz.scheduler-name | 否 | scheduler | 調度器名稱 |
| api.boot.quartz.auto-startup | 否 | true | 初始化后是否自動啟動調度程序 |
| api.boot.quartz.startup-delay | 否 | 0 | 初始化完成后啟動調度程序的延遲。 |
| api.boot.quartz.wait-for-jobs-to-complete-on-shutdown | 否 | false | 是否等待正在運行的作業在關閉時完成。 |
| api.boot.quartz.overwrite-existing-jobs | 否 | false | 配置的作業是否應覆蓋現有的作業定義。 |
| api.boot.quartz.properties | 否 | Quartz自定義的配置屬性,具體參考quartz配置 | |
| api.boot.quartz.jdbc | 否 | 配置數據庫方式的Jdbc相關配置 |
內存方式
ApiBoot Quartz在使用內存方式存儲任務時,不需要做配置調整。
數據庫方式
需要在application.yml配置文件內修改api.boot.quartz.job-store-type參數,如下所示:
api: boot: quartz:# Jdbc方式 job-store-type: jdbc 復制代碼Quartz所需表結構
Quartz的數據庫方式內部通過DataSource獲取數據庫連接對象來進行操作數據,所操作數據表的表結構是固定的,ApiBoot把Quartz所支持的所有表結構都進行了整理,訪問Quartz支持數據庫建表語句列表查看,復制執行對應數據庫語句即可。
創建任務類
我們只需要讓新建類集成QuartzJobBean就可以完成創建一個任務類,如下簡單示例:
/*** 任務定義示例* 與Quartz使用方法一致,ApiBoot只是在原生基礎上進行擴展,不影響原生使用* <p>* 繼承QuartzJobBean抽象類后會在項目啟動時會自動加入Spring IOC** @author:恒宇少年 - 于起宇* <p>* DateTime:2019-03-28 17:26* Blog:http://blog.yuqiyu.com* WebSite:http://www.jianshu.com/u/092df3f77bca* Gitee:https://gitee.com/hengboy* GitHub:https://github.com/hengboy*/ public class DemoJob extends QuartzJobBean {/*** logger instance*/static Logger logger = LoggerFactory.getLogger(DemoJob.class);protected void executeInternal(JobExecutionContext context) throws JobExecutionException {logger.info("定時任務Job Key : {}", context.getJobDetail().getKey());logger.info("定時任務執行時所攜帶的參數:{}", JSON.toJSONString(context.getJobDetail().getJobDataMap()));//...處理邏輯} } 復制代碼任務參數
在任務執行時傳遞參數是必須的,ApiBoot Quartz提供了比較方便的傳遞方式,不過最終Quartz會把傳遞的值都會轉換為String類型數據。
任務Key默認值
ApiBoot Quartz的newJob方法所創建的定時任務,如果在不傳遞Job Key參數時,會默認使用UUID隨機字符串作為Job Key以及Trigger Key。
自定義任務開始時間
任務開始時間可以通過startAtTime方法進行設置,在不設置的情況下,任務創建完成后會立刻執行。
Cron 表達式任務
創建Cron類型任務如下所示:
String jobKey = apiBootQuartzService.newJob(ApiBootCronJobWrapper.Context().jobClass(DemoJob.class).cron("0/5 * * * * ?").param(ApiBootJobParamWrapper.wrapper().put("param", "測試")).wrapper()); 復制代碼Cron 表達式任務由ApiBootCronJobWrapper類進行構建。
上面的DemoJob任務類將會每隔5秒執行一次。
Loop 重復任務
Loop循環任務,當在不傳遞重復執行次數時,不進行重復執行,僅僅執行一次,如下所示:
String jobKey = apiBootQuartzService.newJob(ApiBootLoopJobWrapper.Context()// 參數.param(ApiBootJobParamWrapper.wrapper().put("userName", "恒宇少年").put("userAge", 24))// 每次循環的間隔時間,單位:毫秒.loopIntervalTime(2000)// 循環次數.repeatTimes(5)// 開始時間,10秒后執行.startAtTime(new Date(System.currentTimeMillis() + 10000))// 任務類.jobClass(DemoJob.class).wrapper()); 復制代碼Loop 任務由ApiBootLoopJobWrapper類進行構建。
上面的定時任務將會重復執行5次,連上自身執行的一次也就是會執行6次,每次的間隔時間為2秒,在任務創建10秒后進行執行。
Once 一次性任務
Once一次性任務,任務執行一次會就會被自動釋放,如下所示:
Map paramMap = new HashMap(1); paramMap.put("paramKey", "參數值");String jobKey = apiBootQuartzService.newJob(ApiBootOnceJobWrapper.Context().jobClass(DemoJob.class)// 參數.param(ApiBootJobParamWrapper.wrapper().put("mapJson", JSON.toJSONString(paramMap)))// 開始時間,2秒后執行.startAtTime(new Date(System.currentTimeMillis() + 2000)).wrapper() );復制代碼Once 任務由ApiBootOnceJobWrapper類進行構建。
在參數傳遞時可以是對象、集合,不過需要進行轉換成字符串才可以進行使用。
暫停任務執行
任務在執行過程中可以進行暫停操作,通過ApiBoot Quartz提供的pauseJob方法就可以很簡單的實現,當然暫停時需要傳遞Job Key,Job Key可以從創建任務方法返回值獲得。
暫停任務如下所示:
// 暫停指定Job Key的任務 apiBootQuartzService.pauseJob(jobKey); // 暫停多個執行中任務 apiBootQuartzService.pauseJobs(jobKey,jobKey,jobKey); 復制代碼恢復任務執行
任務執行完暫停后,如果想要恢復可以使用如下方式:
// 恢復指定Job Key的任務執行 apiBootQuartzService.resumeJob(jobKey); // 恢復多個暫停任務 apiBootQuartzService.resumeJobs(jobKey,jobKey,jobKey); 復制代碼修改Cron表達式
修改Cron表達式的場景如下:
- 已創建 & 未執行
- 已創建 & 已執行
修改方法如下所示:
// 修改執行Job Key任務的Cron表達式 apiBootQuartzService.updateJobCron(jobKey, "0/5 * * * * ?"); 復制代碼刪除任務
想要手動釋放任務時可以使用如下方式:
// 手動刪除指定Job Key任務 apiBootQuartzService.deleteJob(jobKey); // 手動刪除多個任務 apiBootQuartzService.deleteJobs(jobKey,jobKey,jobKey); 復制代碼刪除任務的順序如下:
轉載于:https://juejin.im/post/5ca57e756fb9a05e51235ec4
總結
以上是生活随笔為你收集整理的ApiBoot - ApiBoot Quartz 使用文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从事前端开发必须要了解的CSS原理(转)
- 下一篇: Mac OS上用item2连接CentO