Quartz高可用定時(shí)任務(wù)的快速上手指南
定時(shí)任務(wù)使用指南
如果你想做定時(shí)任務(wù),有高可用方面的需求,或者僅僅想入門快,上手簡單,那么選用它準(zhǔn)沒錯(cuò)。
定時(shí)任務(wù)模塊是對Quartz框架進(jìn)一步封裝,使用更加簡潔。
1、引入依賴
<dependency> <groupId>xin.altitude.cms</groupId> <artifactId>ucode-cms-quartz</artifactId> <version>1.5.4.1</version> </dependency>
2、快速上手
實(shí)現(xiàn)org.quartz.Job接口;使用注解CronExp添加任務(wù)的調(diào)度策略;使用注解Component將任務(wù)注入容器中。
啟動(dòng)項(xiàng)目,定時(shí)任務(wù)便處于監(jiān)聽與運(yùn)行中。
@Component @DisallowConcurrentExecution @CronExp(cron = "0/5 * * * * ?") public class DemoJob implements Job { @Override public void execute(JobExecutionContext context) { System.out.println("任務(wù)1:" + LocalDateTime.now()); } }
3、手動(dòng)觸發(fā)定時(shí)任務(wù)
定時(shí)任務(wù)除了以既有頻率周期性運(yùn)行外,還有通過接口手動(dòng)被觸發(fā)的能力。
調(diào)用如下接口,可手動(dòng)觸發(fā)任務(wù)ID編號為jobId的任務(wù)。
http://localhost:8080/cms-api/quartz/job/{jobId}
如果有手動(dòng)觸發(fā)定時(shí)任務(wù)的需求,則需要任務(wù)ID唯一并且已知,因此需要在編寫定時(shí)任務(wù)時(shí)手動(dòng)指定。
@CronExp(id = 1, cron = "0/5 * * * * ?")
通過注解CronExp的id屬性可指定任務(wù)ID,不顯示指定則使用隨機(jī)ID,不滿足已知的條件,因此無法手動(dòng)觸發(fā)。
4、帶參數(shù)任務(wù)
盡管大多數(shù)任務(wù)不需要注入?yún)?shù),但仍有少量的場景需要向定時(shí)任務(wù)注入?yún)?shù)。
public void execute(JobExecutionContext context) { /* 如果在調(diào)用任務(wù)時(shí)傳入了參數(shù),則能夠從Map中獲取 */ Map<String, Object> dataMap = context.getMergedJobDataMap(); /* 比如從Map中獲取一個(gè)鍵值對,一般來說參數(shù)均為基本數(shù)據(jù)類型 */ Object key = dataMap.get("key"); System.out.println("任務(wù)2:" + LocalDateTime.now() + ": " + key); }
在編寫定時(shí)任務(wù)時(shí),可從JobExecutionContext對象中解析一個(gè)Map,從而完成參數(shù)的注入。
http://localhost:8080/cms-api/quartz/job/1?key=a
上述http調(diào)用的含義是手動(dòng)觸發(fā)任務(wù)ID為【1】的任務(wù),并且向其傳遞參數(shù)為【key】值為【a】的參數(shù)。
5、任務(wù)并發(fā)
本框架不支持任務(wù)并發(fā),換句話說并發(fā)對定時(shí)任務(wù)不利,因此需要手動(dòng)禁止。
需要注意的是Quartz的并發(fā)是指當(dāng)任務(wù)執(zhí)行耗時(shí)超過任務(wù)調(diào)度周期時(shí),上一個(gè)任務(wù)未執(zhí)行完,新任務(wù)是否執(zhí)行。
一般來說需要顯示禁止并發(fā),在任務(wù)類上添加注解DisallowConcurrentExecution即可禁止任務(wù)并發(fā)。
6、持久化
如果定時(shí)任務(wù)有高可用的需求,那么需要對任務(wù)進(jìn)行持久化。定時(shí)任務(wù)數(shù)據(jù)持久化到數(shù)據(jù)庫中后,支持應(yīng)用程序多開。定時(shí)任務(wù)持久化多節(jié)點(diǎn)部署后,集群中單節(jié)點(diǎn)故障不影響定時(shí)任務(wù)的執(zhí)行。
定時(shí)任務(wù)持久化,僅需修改yml文件配置即可達(dá)到目標(biāo),無需修改代碼。一般而言使用Mysql做持久化的容器。
spring: quartz: properties: org.quartz.jobStore.isClustered: true org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource: qzDS org.quartz.dataSource.qzDS.driver: com.mysql.cj.jdbc.Driver org.quartz.dataSource.qzDS.URL: jdbc:mysql://localhost:3306/quartz-demo org.quartz.dataSource.qzDS.user: root org.quartz.dataSource.qzDS.password: 123456
除了修改主機(jī)、端口、數(shù)據(jù)庫名、用戶名、密碼五個(gè)參數(shù)外,其余參數(shù)使用默認(rèn)值即可。
配置完數(shù)據(jù)庫連接后,使用SQL腳本,注意初始化數(shù)據(jù)庫
總結(jié)
到此這篇關(guān)于Quartz高可用定時(shí)任務(wù)的快速上手的文章就介紹到這了,更多相關(guān)Quartz高可用定時(shí)任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解Spring整合Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)
- Quartz實(shí)現(xiàn)JAVA定時(shí)任務(wù)的動(dòng)態(tài)配置的方法
- Springboot整個(gè)Quartz實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)的示例代碼
- springboot整合Quartz實(shí)現(xiàn)動(dòng)態(tài)配置定時(shí)任務(wù)的方法
- spring boot整合quartz實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)的方法
- 最流行的java后臺(tái)框架spring quartz定時(shí)任務(wù)
- 淺談SpringBoot集成Quartz動(dòng)態(tài)定時(shí)任務(wù)
- SpringBoot與Quartz集成實(shí)現(xiàn)分布式定時(shí)任務(wù)集群的代碼實(shí)例
- springboot整合quartz實(shí)現(xiàn)定時(shí)任務(wù)示例
- 基于Quartz定時(shí)調(diào)度任務(wù)(詳解)
相關(guān)文章
Java多線程批量數(shù)據(jù)導(dǎo)入的方法詳解
這篇文章主要介紹了Java多線程批量數(shù)據(jù)導(dǎo)入的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面小編和大家來一起學(xué)習(xí)下吧2019-06-06Spring?MVC中@Controller和@RequestMapping注解使用
這篇文章主要介紹了Spring?MVC中@Controller和@RequestMapping注解使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02SpringMVC事件監(jiān)聽ApplicationListener實(shí)例解析
這篇文章主要介紹了SpringMVC事件監(jiān)聽ApplicationListener實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11詳細(xì)解讀AbstractStringBuilder類源碼
這篇文章主要介紹了詳細(xì)解讀AbstractStringBuilder類源碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-12-12Java生成隨機(jī)數(shù)之Random與ThreadLocalRandom性能比較詳解
大家項(xiàng)目中如果有生成隨機(jī)數(shù)的需求,我想大多都會(huì)選擇使用Random來實(shí)現(xiàn),它內(nèi)部使用了CAS來實(shí)現(xiàn)。?實(shí)際上,JDK1.7之后,提供了另外一個(gè)生成隨機(jī)數(shù)的類ThreadLocalRandom,那么他們二者之間的性能是怎么樣的呢?本文就來詳細(xì)說說2022-12-12Spring?Security權(quán)限管理小結(jié)
SpringSecurity是一個(gè)權(quán)限管理框架,核心是認(rèn)證和授權(quán),前面已經(jīng)系統(tǒng)的給大家介紹過了認(rèn)證的實(shí)現(xiàn)和源碼分析,本文重點(diǎn)來介紹下權(quán)限管理,需要的朋友可以參考下2022-08-08解決spring boot啟動(dòng)掃描不到自定義注解的問題
這篇文章主要介紹了解決spring boot啟動(dòng)掃描不到自定義注解的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09SpringBoot2零基礎(chǔ)到精通之映射與常用注解請求處理
SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時(shí)也是簡化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)映射、常用注解和方法參數(shù)的小技巧2022-03-03