简介
Quartz是一个很牛的任务调度框架,通过它我们可以实现诸如:定时活动、延时活动、订单状态延时检测、服务器状态定时检测等,时间调度任务功能。
下面我们介绍一下它在SpringBoot中的使用:
- 1.配置Quartz
- 2.静态任务调度
- 3.动态任务调度
- 4.任务调度监听器
快速集成
快速集成体验一下Quartz的功能吧。
- 1.首先引入maven依赖
<!--Quartz-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
- 2.配置Quartz
SpringBoot集成Quartz依然沿用了Spring的典型方式,使用工厂Bean生成Bean的方式。在Quartz中,需要被调度的任务叫做Job,而负责调度任务则是Scheduler。
我们首先需要配置工厂Bean:JobFactory接口,自定义一个AutowiringSpringBeanJobFactory类继承SpringBeanJobFactory(实现了JobFactory接口)
AutowiringSpringBeanJobFactory工厂类将负责生成实现了Job接口的类的实例对象Bean。
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
/**
* 自动注入的jobBean工厂
*/
public class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory
implements ApplicationContextAware {
private transient AutowireCapableBeanFactory beanFactory;
@Override
public void setApplicationContext(final ApplicationContext context) {
beanFactory = context.getAutowireCapableBeanFactory();
}
@Override
protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
final Object job = super.createJobInstance(bundle);
beanFactory.autowireBean(job);
return job;
}
}
下面创建一个Quartz的config配置类:SchedulerConfig
SchedulerConfig类通过 @Configuration 自动装载配置。这里它配置了两种Bean工厂,一个是JobFactory ,另一个是SchedulerFactoryBean。JobFactory就是上面我们所说的AutowiringSpringBeanJobFactory,而SchedulerFactoryBean是Quartz为我们提供的一个生成Scheduler实例Bean的工厂类。
而在这个SchedulerConfig类中还提供了simpleJobTrigger()【表达式任务触发器工厂】和quar