摘要:重復(fù)任務(wù)循環(huán)任務(wù),當(dāng)在不傳遞重復(fù)執(zhí)行次數(shù)時,不進(jìn)行重復(fù)執(zhí)行,僅僅執(zhí)行一次,如下所示參數(shù)恒宇少年每次循環(huán)的間隔時間,單位毫秒循環(huán)次數(shù)開始時間,秒后執(zhí)行任務(wù)類任務(wù)由類進(jìn)行構(gòu)建。
ApiBoot Quartz
ApiBoot內(nèi)部集成了Quartz,提供了數(shù)據(jù)庫方式、內(nèi)存方式的進(jìn)行任務(wù)的存儲,其中數(shù)據(jù)庫方式提供了分布式集群任務(wù)調(diào)度,任務(wù)自動平滑切換執(zhí)行節(jié)點。
引用ApiBoot Quartz在pom.xml配置文件內(nèi)添加,如下配置:
org.minbox.framework api-boot-starter-quartz
備注:如果使用ApiBoot Quartz的內(nèi)存方式,僅需要添加上面的依賴即可。相關(guān)配置
參數(shù)名稱 | 是否必填 | 默認(rèn)值 | 描述 |
---|---|---|---|
api.boot.quartz.job-store-type | 否 | memory | 任務(wù)存儲源方式,默認(rèn)內(nèi)存方式 |
api.boot.quartz.scheduler-name | 否 | scheduler | 調(diào)度器名稱 |
api.boot.quartz.auto-startup | 否 | true | 初始化后是否自動啟動調(diào)度程序 |
api.boot.quartz.startup-delay | 否 | 0 | 初始化完成后啟動調(diào)度程序的延遲。 |
api.boot.quartz.wait-for-jobs-to-complete-on-shutdown | 否 | false | 是否等待正在運(yùn)行的作業(yè)在關(guān)閉時完成。 |
api.boot.quartz.overwrite-existing-jobs | 否 | false | 配置的作業(yè)是否應(yīng)覆蓋現(xiàn)有的作業(yè)定義。 |
api.boot.quartz.properties | 否 | Quartz自定義的配置屬性,具體參考quartz配置 | |
api.boot.quartz.jdbc | 否 | 配置數(shù)據(jù)庫方式的Jdbc相關(guān)配置 |
ApiBoot Quartz在使用內(nèi)存方式存儲任務(wù)時,不需要做配置調(diào)整。
數(shù)據(jù)庫方式需要在application.yml配置文件內(nèi)修改api.boot.quartz.job-store-type參數(shù),如下所示:
api: boot: quartz: # Jdbc方式 job-store-type: jdbcQuartz所需表結(jié)構(gòu)
Quartz的數(shù)據(jù)庫方式內(nèi)部通過DataSource獲取數(shù)據(jù)庫連接對象來進(jìn)行操作數(shù)據(jù),所操作數(shù)據(jù)表的表結(jié)構(gòu)是固定的,ApiBoot把Quartz所支持的所有表結(jié)構(gòu)都進(jìn)行了整理,訪問Quartz支持?jǐn)?shù)據(jù)庫建表語句列表查看,復(fù)制執(zhí)行對應(yīng)數(shù)據(jù)庫語句即可。
創(chuàng)建任務(wù)類我們只需要讓新建類集成QuartzJobBean就可以完成創(chuàng)建一個任務(wù)類,如下簡單示例:
/** * 任務(wù)定義示例 * 與Quartz使用方法一致,ApiBoot只是在原生基礎(chǔ)上進(jìn)行擴(kuò)展,不影響原生使用 *任務(wù)參數(shù)* 繼承QuartzJobBean抽象類后會在項目啟動時會自動加入Spring IOC * * @author:恒宇少年 - 于起宇 *
* 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); @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { logger.info("定時任務(wù)Job Key : {}", context.getJobDetail().getKey()); logger.info("定時任務(wù)執(zhí)行時所攜帶的參數(shù):{}", JSON.toJSONString(context.getJobDetail().getJobDataMap())); //...處理邏輯 } }
在任務(wù)執(zhí)行時傳遞參數(shù)是必須的,ApiBoot Quartz提供了比較方便的傳遞方式,不過最終Quartz會把傳遞的值都會轉(zhuǎn)換為String類型數(shù)據(jù)。
任務(wù)Key默認(rèn)值ApiBoot Quartz的newJob方法所創(chuàng)建的定時任務(wù),如果在不傳遞Job Key參數(shù)時,會默認(rèn)使用UUID隨機(jī)字符串作為Job Key以及Trigger Key。
自定義任務(wù)開始時間任務(wù)開始時間可以通過startAtTime方法進(jìn)行設(shè)置,在不設(shè)置的情況下,任務(wù)創(chuàng)建完成后會立刻執(zhí)行。
Cron 表達(dá)式任務(wù)創(chuàng)建Cron類型任務(wù)如下所示:
String jobKey = apiBootQuartzService.newJob(ApiBootCronJobWrapper.Context() .jobClass(DemoJob.class) .cron("0/5 * * * * ?") .param( ApiBootJobParamWrapper.wrapper().put("param", "測試")) .wrapper());
Cron 表達(dá)式任務(wù)由ApiBootCronJobWrapper類進(jìn)行構(gòu)建。
上面的DemoJob任務(wù)類將會每隔5秒執(zhí)行一次。
Loop 重復(fù)任務(wù)Loop循環(huán)任務(wù),當(dāng)在不傳遞重復(fù)執(zhí)行次數(shù)時,不進(jìn)行重復(fù)執(zhí)行,僅僅執(zhí)行一次,如下所示:
String jobKey = apiBootQuartzService.newJob( ApiBootLoopJobWrapper.Context() // 參數(shù) .param( ApiBootJobParamWrapper.wrapper() .put("userName", "恒宇少年") .put("userAge", 24) ) // 每次循環(huán)的間隔時間,單位:毫秒 .loopIntervalTime(2000) // 循環(huán)次數(shù) .repeatTimes(5) // 開始時間,10秒后執(zhí)行 .startAtTime(new Date(System.currentTimeMillis() + 10000)) // 任務(wù)類 .jobClass(DemoJob.class) .wrapper() );
Loop 任務(wù)由ApiBootLoopJobWrapper類進(jìn)行構(gòu)建。
上面的定時任務(wù)將會重復(fù)執(zhí)行5次,連上自身執(zhí)行的一次也就是會執(zhí)行6次,每次的間隔時間為2秒,在任務(wù)創(chuàng)建10秒后進(jìn)行執(zhí)行。
Once 一次性任務(wù)Once一次性任務(wù),任務(wù)執(zhí)行一次會就會被自動釋放,如下所示:
Map paramMap = new HashMap(1); paramMap.put("paramKey", "參數(shù)值"); String jobKey = apiBootQuartzService.newJob( ApiBootOnceJobWrapper.Context() .jobClass(DemoJob.class) // 參數(shù) .param( ApiBootJobParamWrapper.wrapper() .put("mapJson", JSON.toJSONString(paramMap)) ) // 開始時間,2秒后執(zhí)行 .startAtTime(new Date(System.currentTimeMillis() + 2000)) .wrapper() );
Once 任務(wù)由ApiBootOnceJobWrapper類進(jìn)行構(gòu)建。
在參數(shù)傳遞時可以是對象、集合,不過需要進(jìn)行轉(zhuǎn)換成字符串才可以進(jìn)行使用。
暫停任務(wù)執(zhí)行任務(wù)在執(zhí)行過程中可以進(jìn)行暫停操作,通過ApiBoot Quartz提供的pauseJob方法就可以很簡單的實現(xiàn),當(dāng)然暫停時需要傳遞Job Key,Job Key可以從創(chuàng)建任務(wù)方法返回值獲得。
暫停任務(wù)如下所示:
// 暫停指定Job Key的任務(wù) apiBootQuartzService.pauseJob(jobKey); // 暫停多個執(zhí)行中任務(wù) apiBootQuartzService.pauseJobs(jobKey,jobKey,jobKey);恢復(fù)任務(wù)執(zhí)行
任務(wù)執(zhí)行完暫停后,如果想要恢復(fù)可以使用如下方式:
// 恢復(fù)指定Job Key的任務(wù)執(zhí)行 apiBootQuartzService.resumeJob(jobKey); // 恢復(fù)多個暫停任務(wù) apiBootQuartzService.resumeJobs(jobKey,jobKey,jobKey);修改Cron表達(dá)式
修改Cron表達(dá)式的場景如下:
已創(chuàng)建 & 未執(zhí)行
已創(chuàng)建 & 已執(zhí)行
修改方法如下所示:
// 修改執(zhí)行Job Key任務(wù)的Cron表達(dá)式 apiBootQuartzService.updateJobCron(jobKey, "0/5 * * * * ?");刪除任務(wù)
想要手動釋放任務(wù)時可以使用如下方式:
// 手動刪除指定Job Key任務(wù) apiBootQuartzService.deleteJob(jobKey); // 手動刪除多個任務(wù) apiBootQuartzService.deleteJobs(jobKey,jobKey,jobKey);
刪除任務(wù)的順序如下:
暫停觸發(fā)器
移除觸發(fā)器
刪除任務(wù)
本章源碼地址:https://github.com/hengboy/api-boot/tree/master/api-boot-samples/api-boot-sample-quartz
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74058.html
摘要:相關(guān)配置配置參數(shù)參數(shù)介紹默認(rèn)值是否啟用文檔標(biāo)題快速集成文檔文檔描述通過自動化配置快速集成文檔,僅需一個注解一個依賴即可。注意通過所獲取的類型都為。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務(wù)集成基礎(chǔ)框架, 內(nèi)部提供了框架的封裝集成、使用擴(kuò)展、自動化完成配置,讓接口開發(fā)者可以選著性完成開箱即用, 不再為搭建接口框架而犯愁,從而極大...
摘要:如果全部使用默認(rèn)值的情況話不需要做任何配置方式前提項目需要添加數(shù)據(jù)源依賴。獲取通過獲取啟用在使用格式化時非常簡單的,配置如下所示開啟轉(zhuǎn)換轉(zhuǎn)換時所需加密,默認(rèn)為恒宇少年于起宇默認(rèn)不啟用,簽名建議進(jìn)行更換。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務(wù)集成基礎(chǔ)框架, 內(nèi)部提供了框架的封裝集成、使用擴(kuò)展、自動化完成配置,讓接口開發(fā)者可以選著性完成開箱即...
摘要:的短信服務(wù)模塊是由阿里云的國際短信服務(wù)提供的,支持國內(nèi)和國際快速發(fā)送驗證碼短信通知和推廣短信。前提需要到阿里云控制臺申請開通短信服務(wù)。如果在阿里云控制臺定義的短信模板存在多個參數(shù),可以通過方法來進(jìn)行挨個添加,該方法返回值為本對象。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務(wù)集成基礎(chǔ)框架, 內(nèi)部提供了框架的封裝集成、使用擴(kuò)展、自動化完成配置,讓接...
摘要:如下所示不配置默認(rèn)使用自定義是的概念,用于自定義轉(zhuǎn)換實現(xiàn),比如自定義格式化日期自動截取小數(shù)點等。下面提供一個的簡單示例,具體的使用請參考官方文檔。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務(wù)集成基礎(chǔ)框架, 內(nèi)部提供了框架的封裝集成、使用擴(kuò)展、自動化完成配置,讓接口開發(fā)者可以選著性完成開箱即用, 不再為搭建接口框架而犯愁,從而極大...
摘要:添加快速集成的對象存儲服務(wù),提供常用的文件操作方法,當(dāng)然也提供自定義擴(kuò)展,以致于滿足絕大數(shù)業(yè)務(wù)場景,并且通過擴(kuò)展可以實現(xiàn)上傳文件進(jìn)度條下載文件進(jìn)度條存儲空間操作靜態(tài)網(wǎng)站托管訪問日志防盜鏈分片上傳追加上傳斷點續(xù)傳等等。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務(wù)集成基礎(chǔ)框架, 內(nèi)部提供了框架的封裝集成、使用擴(kuò)展、自動化完成配置,讓接口開發(fā)者可以選...
閱讀 909·2021-11-15 11:38
閱讀 2555·2021-09-08 09:45
閱讀 2864·2021-09-04 16:48
閱讀 2599·2019-08-30 15:54
閱讀 960·2019-08-30 13:57
閱讀 1656·2019-08-29 15:39
閱讀 531·2019-08-29 12:46
閱讀 3554·2019-08-26 13:39