摘要:重復任務循環任務,當在不傳遞重復執行次數時,不進行重復執行,僅僅執行一次,如下所示參數恒宇少年每次循環的間隔時間,單位毫秒循環次數開始時間,秒后執行任務類任務由類進行構建。
ApiBoot Quartz
ApiBoot內部集成了Quartz,提供了數據庫方式、內存方式的進行任務的存儲,其中數據庫方式提供了分布式集群任務調度,任務自動平滑切換執行節點。
引用ApiBoot Quartz在pom.xml配置文件內添加,如下配置:
org.minbox.framework api-boot-starter-quartz
備注:如果使用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: jdbcQuartz所需表結構
Quartz的數據庫方式內部通過DataSource獲取數據庫連接對象來進行操作數據,所操作數據表的表結構是固定的,ApiBoot把Quartz所支持的所有表結構都進行了整理,訪問Quartz支持數據庫建表語句列表查看,復制執行對應數據庫語句即可。
創建任務類我們只需要讓新建類集成QuartzJobBean就可以完成創建一個任務類,如下簡單示例:
/** * 任務定義示例 * 與Quartz使用方法一致,ApiBoot只是在原生基礎上進行擴展,不影響原生使用 *任務參數* 繼承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("定時任務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://github.com/hengboy/api-boot/tree/master/api-boot-samples/api-boot-sample-quartz
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74058.html
摘要:相關配置配置參數參數介紹默認值是否啟用文檔標題快速集成文檔文檔描述通過自動化配置快速集成文檔,僅需一個注解一個依賴即可。注意通過所獲取的類型都為。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接口開發者可以選著性完成開箱即用, 不再為搭建接口框架而犯愁,從而極大...
摘要:如果全部使用默認值的情況話不需要做任何配置方式前提項目需要添加數據源依賴。獲取通過獲取啟用在使用格式化時非常簡單的,配置如下所示開啟轉換轉換時所需加密,默認為恒宇少年于起宇默認不啟用,簽名建議進行更換。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接口開發者可以選著性完成開箱即...
摘要:的短信服務模塊是由阿里云的國際短信服務提供的,支持國內和國際快速發送驗證碼短信通知和推廣短信。前提需要到阿里云控制臺申請開通短信服務。如果在阿里云控制臺定義的短信模板存在多個參數,可以通過方法來進行挨個添加,該方法返回值為本對象。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接...
摘要:如下所示不配置默認使用自定義是的概念,用于自定義轉換實現,比如自定義格式化日期自動截取小數點等。下面提供一個的簡單示例,具體的使用請參考官方文檔。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接口開發者可以選著性完成開箱即用, 不再為搭建接口框架而犯愁,從而極大...
摘要:添加快速集成的對象存儲服務,提供常用的文件操作方法,當然也提供自定義擴展,以致于滿足絕大數業務場景,并且通過擴展可以實現上傳文件進度條下載文件進度條存儲空間操作靜態網站托管訪問日志防盜鏈分片上傳追加上傳斷點續傳等等。 ApiBoot是一款基于SpringBoot1.x,2.x的接口服務集成基礎框架, 內部提供了框架的封裝集成、使用擴展、自動化完成配置,讓接口開發者可以選...
閱讀 881·2021-11-15 11:38
閱讀 2512·2021-09-08 09:45
閱讀 2811·2021-09-04 16:48
閱讀 2562·2019-08-30 15:54
閱讀 928·2019-08-30 13:57
閱讀 1617·2019-08-29 15:39
閱讀 495·2019-08-29 12:46
閱讀 3518·2019-08-26 13:39