springboot整合quartz


一、quartz簡介

1.Quartz是一個開源的任務調度框架。基於定時、定期的策略來執行任務是它的核心功能,比如x年x月的每個星期五上午8點到9點,每隔10分鍾執行1次。

2.Quartz有3個核心要素:調度器(Scheduler)、任務(Job)、觸發器(Trigger)。

2.1.Job(任務):是一個接口,有一個方法void execute(),可以通過實現該接口來定義需要執行的任務(具體的邏輯代碼)。
2.2.JobDetail:Quartz每次執行job時,都重新創建一個Job實例,會接收一個Job實現類,以便運行的時候通過newInstance()的反射調用機制去實例化Job.JobDetail是用來描述Job實現類以及相關靜態信息,比如任務在scheduler中的組名等信息。
2.3.Trigger(觸發器):描述觸發Job執行的時間觸發規則實現類SimpleTrigger和CronTrigger可以通過crom表達式定義出各種復雜的調度方案。
2.4.Calendar:是一些日歷特定時間的集合。一個Trigger可以和多個 calendar關聯,比如每周一早上10:00執行任務,法定假日不執行,則可以通過calendar進行定點排除。
2.5.Scheduler(調度器):代表一個Quartz的獨立運行容器。Trigger和JobDetail可以注冊到Scheduler中。Scheduler可以將Trigger綁定到某一JobDetail上,這樣當Trigger被觸發時,對應的Job就會執行。一個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(具體的業務邏輯代碼寫在這里)
job任務中執行邏輯代碼實現任務的定時使用

public class DateTimeJob extends QuartzJobBean {
 
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //獲取JobDetail中關聯的數據
        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執行周期及詳細配置


@Configuration
public class QuartzConfig {
    @Bean
    public JobDetail printTimeJobDetail(){
        return JobBuilder.newJob(DateTimeJob.class)//PrintTimeJob我們的業務類
                .withIdentity("DateTimeJob")//可以給該JobDetail起一個id
                //每個JobDetail內都有一個Map,包含了關聯到這個Job的數據,在Job類中可以通過context獲取
                .usingJobData("msg", "Hello Quartz")//關聯鍵值對
                .storeDurably()//即使沒有Trigger關聯時,也不需要刪除該JobDetail
                .build();
    }
    @Bean
    public Trigger printTimeJobTrigger() {
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ?");
        return TriggerBuilder.newTrigger()
                .forJob(printTimeJobDetail())//關聯上述的JobDetail
                .withIdentity("quartzTaskService")//給Trigger起個名字
                .withSchedule(cronScheduleBuilder)
                .build();
    }
}

四、代碼效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM