springboot+Quartz整合!!!簡單實用

一、什麼是Quartz

在Quartz官網上是這麼寫的 Quartz官網

1、Quartz 是一個完全由 Java 編寫的開源作業調度框架,爲在 Java 應用程序中進行作業調度提供了簡單卻強大的機制。
2、Quartz 可以與 J2EE 與 J2SE 應用程序相結合也可以單獨使用。
3、Quartz 允許程序開發人員根據時間的間隔來調度作業。
4、Quartz 實現了作業和觸發器的多對多的關係,還能把多個作業與不同的觸發器關聯。

二、Quartz核心概念

1、Job 表示一個工作,要執行的具體內容。
2、JobDetail 表示一個具體的可執行的調度程序,Job 是這個可執行程調度程序所要執行的內容,另外 JobDetail 還包含了這個任務調度的方案和策略。
3、Trigger 代表一個調度參數的配置,什麼時候去調。
4、Scheduler 代表一個調度容器,一個調度容器中可以註冊多個 JobDetail 和 Trigger。當 Trigger 與 JobDetail 組合,就可以被 Scheduler 容器調度了。

三、在pom.xml文件中 導入Quartz依賴包

代碼如下 也可自行去maven倉庫中下載 輸入Quartz maven倉庫

        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.0</version>
        </dependency>

四、Quartz配置

第一步 首先創建job工廠並注入spring Ioc容器

@Component
public class MyAdaptableJobFactory extends AdaptableJobFactory {

    //AutowireCapableBeanFactory 可以將一個對象添加到SpringIOC容器中,並且完成該對象注入
    @Autowired
    private AutowireCapableBeanFactory autowireCapableBeanFactory;

    /**
     * 該方法需要將實例化的任務對象手動的添加到springIOC容器中並且完成對象的注入
     */
    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object obj = super.createJobInstance(bundle);
        //將obj對象添加Spring IOC容器中,並完成注入
        this.autowireCapableBeanFactory.autowireBean(obj);
        return obj;
    }

}

第二步 創建自己的工作類

public class JobTest implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("測試quartz  Job定時任務!!");
    }
}

第三步 Quartz配置類

@Configuration
public class QuartzConfig {
    /**
     * 1.創建Job對象
     */
    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean() {
        JobDetailFactoryBean factory = new JobDetailFactoryBean();
        //關聯我們自己的Job類
        factory.setJobClass(JobTest.class);
        return factory;
    }

    /**
     * 2.創建Trigger對象
     * 簡單的Trigger
     */
    /**
     * Cron Trigger
     */
    @Bean
    public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean) {
        CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
        factory.setJobDetail(jobDetailFactoryBean.getObject());
        //這裏涉及到Cron表達式 可以去看我寫的Cron表達式詳解博客!!! 此處代表每10秒鐘 調用一次
        factory.setCronExpression("0/10 * * * * ?");
        return factory;
    }
    /**
     * 3.創建Scheduler對象
     */
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean, MyAdaptableJobFactory myAdaptableJobFactory) {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        //關聯trigger
        factory.setTriggers(cronTriggerFactoryBean.getObject());
        factory.setJobFactory(myAdaptableJobFactory);
        return factory;
    }

}

總結一下 在Quartz配置類中
1、首先去創建job可執行的調度程序,並讓調度程序關聯具體的執行內容
2、爲調度程序設置trigger(什麼時候去調用),關聯jobDetail,簡單一點來說就是 什麼任務什麼時候執行
3、創建調度器 scheduler,並關聯trigger、自定義任務工廠MyAdaptableJobFactory

測試
在這裏插入圖片描述
這就是springboot+quartz定時任務整合啦!!下面有還有整合quartz多任務 cron表達式詳解
SpringBoot+Quartz實現多個定時任務 方法與我在Quartz中使用的JobDetailFactoryBean有些不同
cron表達式詳解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章