一、什麼是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表達式詳解