一、quartz的介绍
官网:Quartz Enterprise Job Scheduler
二、Quartz框架的使用思路
1)job - 任务 - 你要做什么事?
2)Trigger - 触发器 - 你什么时候去做?
3)Scheduler - 任务调度 - 你什么时候需要去做什么事?
三、SpringBoot整合 Quartz
3.1 加入Quartz依赖(因为我已经在父工程控制了版本号 所以这个没写版本信息)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
3.2 自定义一个任务类Job
/**
* 任务类
*/
@Component
public class QuartzDemo{
//任务
@Override
public void printTime() throws JobExecutionException {
System.out.println("现在时刻:"+new Date());
}
}
3.3 编写quartz的配置类
package com.by.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
@Configuration
public class QuartzConfig {
/**
* job :做什么事
* @param quartzDemo
* @return
*/
@Bean
public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(QuartzDemo quartzDemo) {
MethodInvokingJobDetailFactoryBean JobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();
/**
* 将要做的事情的对象和要执行的方法传递进来
*/
JobDetailFactoryBean.setTargetObject(quartzDemo);
JobDetailFactoryBean.setTargetMethod("printTime");
return JobDetailFactoryBean;
}
/**
* trigger:什么时候做
* @param JobDetailFactoryBean
* @return
*/
@Bean
public CronTriggerFactoryBean cronTriggerFactoryBean(MethodInvokingJobDetailFactoryBean JobDetailFactoryBean) {
CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean();
triggerFactoryBean.setCronExpression("0/1 * * * * ?");
/**
* 将job对象传递进来
* Object getObject():返回有FactoryBean创建的Bean实例,
* 如果isSingleton()返回true,则该实例会放到Spring容器的单实例缓存池中。
*/
triggerFactoryBean.setJobDetail(JobDetailFactoryBean.getObject());
return triggerFactoryBean;
}
/**
* scheduler :什么时候干什么事
* @param triggerFactoryBean
* @return
*/
@Bean
public SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean triggerFactoryBean) {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
/**
* 由于job已经传递到tigger中,所以只需要调用tigger就能完成这两个的关系
*/
schedulerFactoryBean.setTriggers(triggerFactoryBean.getObject());
return schedulerFactoryBean;
}
}
3.4 编写启动类
package com.by;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ICanJobApp {
public static void main(String[] args) {
SpringApplication.run(ICanJobApp.class,args);
}
}