springboot整合quartz實(shí)例demo
一、quartz簡(jiǎn)介
1.Quartz是一個(gè)開源的任務(wù)調(diào)度框架。基于定時(shí)、定期的策略來執(zhí)行任務(wù)是它的核心功能,比如x年x月的每個(gè)星期五上午8點(diǎn)到9點(diǎn),每隔10分鐘執(zhí)行1次。
2.Quartz有3個(gè)核心要素:調(diào)度器(Scheduler)、任務(wù)(Job)、觸發(fā)器(Trigger)。
2.1.Job(任務(wù)):是一個(gè)接口,有一個(gè)方法void execute(),可以通過實(shí)現(xiàn)該接口來定義需要執(zhí)行的任務(wù)(具體的邏輯代碼)。
2.2.JobDetail:Quartz每次執(zhí)行job時(shí),都重新創(chuàng)建一個(gè)Job實(shí)例,會(huì)接收一個(gè)Job實(shí)現(xiàn)類,以便運(yùn)行的時(shí)候通過newInstance()的反射調(diào)用機(jī)制去實(shí)例化Job.JobDetail是用來描述Job實(shí)現(xiàn)類以及相關(guān)靜態(tài)信息,比如任務(wù)在scheduler中的組名等信息。
2.3.Trigger(觸發(fā)器):描述觸發(fā)Job執(zhí)行的時(shí)間觸發(fā)規(guī)則實(shí)現(xiàn)類SimpleTrigger和CronTrigger可以通過crom表達(dá)式定義出各種復(fù)雜的調(diào)度方案。
2.4.Calendar:是一些日歷特定時(shí)間的集合。一個(gè)Trigger可以和多個(gè) calendar關(guān)聯(lián),比如每周一早上10:00執(zhí)行任務(wù),法定假日不執(zhí)行,則可以通過calendar進(jìn)行定點(diǎn)排除。
2.5.Scheduler(調(diào)度器):代表一個(gè)Quartz的獨(dú)立運(yùn)行容器。Trigger和JobDetail可以注冊(cè)到Scheduler中。Scheduler可以將Trigger綁定到某一JobDetail上,這樣當(dāng)Trigger被觸發(fā)時(shí),對(duì)應(yīng)的Job就會(huì)執(zhí)行。一個(gè)Job可以對(duì)應(yīng)多個(gè)Trigger,但一個(gè)Trigger只能對(duì)應(yīng)一個(gè)Job.
二、demo結(jié)構(gòu)
三、代碼詳解
pom.xml
<!--spring boot集成quartz--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
DateTimeJob.java(具體的業(yè)務(wù)邏輯代碼寫在這里)
job任務(wù)中執(zhí)行邏輯代碼實(shí)現(xiàn)任務(wù)的定時(shí)使用
public class DateTimeJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { //獲取JobDetail中關(guān)聯(lián)的數(shù)據(jù) String msg = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("msg"); System.out.println("current time :"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "---" + msg); } }
QuartzConfig.java(配置類)
類中定義job執(zhí)行周期及詳細(xì)配置
@Configuration public class QuartzConfig { @Bean public JobDetail printTimeJobDetail(){ return JobBuilder.newJob(DateTimeJob.class)//PrintTimeJob我們的業(yè)務(wù)類 .withIdentity("DateTimeJob")//可以給該JobDetail起一個(gè)id //每個(gè)JobDetail內(nèi)都有一個(gè)Map,包含了關(guān)聯(lián)到這個(gè)Job的數(shù)據(jù),在Job類中可以通過context獲取 .usingJobData("msg", "Hello Quartz")//關(guān)聯(lián)鍵值對(duì) .storeDurably()//即使沒有Trigger關(guān)聯(lián)時(shí),也不需要?jiǎng)h除該JobDetail .build(); } @Bean public Trigger printTimeJobTrigger() { CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ?"); return TriggerBuilder.newTrigger() .forJob(printTimeJobDetail())//關(guān)聯(lián)上述的JobDetail .withIdentity("quartzTaskService")//給Trigger起個(gè)名字 .withSchedule(cronScheduleBuilder) .build(); } }
四、代碼效果
到此這篇關(guān)于springboot整合quartz的文章就介紹到這了,更多相關(guān)springboot整合quartz內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中Set與List的關(guān)系與區(qū)別介紹
這篇文章主要介紹了Java中Set與List的關(guān)系與區(qū)別介紹,本文總結(jié)它們兩個(gè)接口都是繼承自Collection、它們之間的存儲(chǔ)方式不一樣,需要的朋友可以參考下2015-03-03淺談Arrays.asList() 和ArrayList類型區(qū)別
下面小編就為大家?guī)硪黄狝rrays.asList() 和ArrayList類型區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10Java實(shí)現(xiàn)讀取Jar文件屬性的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)讀取Jar文件屬性的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-08-08Java使用觀察者模式實(shí)現(xiàn)氣象局高溫預(yù)警功能示例
這篇文章主要介紹了Java使用觀察者模式實(shí)現(xiàn)氣象局高溫預(yù)警功能,結(jié)合完整實(shí)例形式分析了java觀察者模式實(shí)現(xiàn)氣象局高溫預(yù)警的相關(guān)接口定義、使用、功能操作技巧,并總結(jié)了其設(shè)計(jì)原則與適用場(chǎng)合,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04Java基于elasticsearch實(shí)現(xiàn)集群管理
這篇文章主要介紹了java基于elasticsearch實(shí)現(xiàn)集群管理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02