springboot整合quartz實例demo
一、quartz簡介
1.Quartz是一個開源的任務調度框架?;诙〞r、定期的策略來執(zhí)行任務是它的核心功能,比如x年x月的每個星期五上午8點到9點,每隔10分鐘執(zhí)行1次。
2.Quartz有3個核心要素:調度器(Scheduler)、任務(Job)、觸發(fā)器(Trigger)。
2.1.Job(任務):是一個接口,有一個方法void execute(),可以通過實現(xiàn)該接口來定義需要執(zhí)行的任務(具體的邏輯代碼)。
2.2.JobDetail:Quartz每次執(zhí)行job時,都重新創(chuàng)建一個Job實例,會接收一個Job實現(xiàn)類,以便運行的時候通過newInstance()的反射調用機制去實例化Job.JobDetail是用來描述Job實現(xiàn)類以及相關靜態(tài)信息,比如任務在scheduler中的組名等信息。
2.3.Trigger(觸發(fā)器):描述觸發(fā)Job執(zhí)行的時間觸發(fā)規(guī)則實現(xiàn)類SimpleTrigger和CronTrigger可以通過crom表達式定義出各種復雜的調度方案。
2.4.Calendar:是一些日歷特定時間的集合。一個Trigger可以和多個 calendar關聯(lián),比如每周一早上10:00執(zhí)行任務,法定假日不執(zhí)行,則可以通過calendar進行定點排除。
2.5.Scheduler(調度器):代表一個Quartz的獨立運行容器。Trigger和JobDetail可以注冊到Scheduler中。Scheduler可以將Trigger綁定到某一JobDetail上,這樣當Trigger被觸發(fā)時,對應的Job就會執(zhí)行。一個Job可以對應多個Trigger,但一個Trigger只能對應一個Job.
二、demo結構

三、代碼詳解
pom.xml
<!--spring boot集成quartz--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
DateTimeJob.java(具體的業(yè)務邏輯代碼寫在這里)
job任務中執(zhí)行邏輯代碼實現(xiàn)任務的定時使用
public class DateTimeJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//獲取JobDetail中關聯(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í)行周期及詳細配置
@Configuration
public class QuartzConfig {
@Bean
public JobDetail printTimeJobDetail(){
return JobBuilder.newJob(DateTimeJob.class)//PrintTimeJob我們的業(yè)務類
.withIdentity("DateTimeJob")//可以給該JobDetail起一個id
//每個JobDetail內都有一個Map,包含了關聯(lián)到這個Job的數(shù)據(jù),在Job類中可以通過context獲取
.usingJobData("msg", "Hello Quartz")//關聯(lián)鍵值對
.storeDurably()//即使沒有Trigger關聯(lián)時,也不需要刪除該JobDetail
.build();
}
@Bean
public Trigger printTimeJobTrigger() {
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ?");
return TriggerBuilder.newTrigger()
.forJob(printTimeJobDetail())//關聯(lián)上述的JobDetail
.withIdentity("quartzTaskService")//給Trigger起個名字
.withSchedule(cronScheduleBuilder)
.build();
}
}四、代碼效果

到此這篇關于springboot整合quartz的文章就介紹到這了,更多相關springboot整合quartz內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Java編程中final,finalize,finally的區(qū)別
這篇文章主要介紹了詳解Java編程中final,finalize,finally的區(qū)別,這個在Java面試題中簡直是太常見了...需要的朋友可以參考下2015-11-11
從零開始Java實現(xiàn)Parser?Combinator
這篇文章主要為大家介紹了從零開始Java實現(xiàn)Parser?Combinator過程及原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
解決引入Redisson可能會出現(xiàn)項目啟動失敗的問題
這篇文章主要介紹了解決引入Redisson可能會出現(xiàn)項目啟動失敗的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
辨析Java中的String與StringBuffer及StringBuilder字符串類
這里將為大家來辨析Java中的String與StringBuffer及StringBuilder字符串類型,通常來說StringBuilder的性能更加,需要的朋友可以參考下2016-05-05

