版权声明:本文为博主原创文章,转载请注明出处,否则予以追究。 https://blog.csdn.net/J_Anson/article/details/79345655
通过quartz实现定时任务的管理,由于quartz本身不支持的IOC自动注入管理bean。因此在于spring集成时,可通过自定义JobFactory的形式,通过继承AdaptableJobFactory类,将quartz对象的生命周期交给Spring IOC管理。
结构:
JobFactory.java——实现自动注入
DBWriter.java——实现定时任务
quartz-maven坐标
<!-- quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
springmvc.xml配置
<!--Quartz-->
<!-- 集成方式:JobDetailFactoryBean,并且任务类需要继承QuartzJobBean-->
<!-- 定义jobDetail -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- durability 表示任务完成之后是否依然保留到数据库,默认false -->
<property name="durability" value="true" />
<!-- 目标类 com.es.quartz.DBWriter.java-->
<property name="jobClass" value="com.es.quartz.DBWriter"></property>
</bean>
<!-- 触发器是CornTrigger -->
<bean id="cornTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetail"/>
<!-- 每5分钟触发 -->
<property name="cronExpression" value="0 0/5 * * * ?"/>
</bean>
<!-- 定义核心调度器 -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cornTrigger"/>
</list>
</property>
<!-- 定义使用自己的jobFactory -->
<property name="jobFactory">
<bean class="com.es.quartz.JobFactory"/>
</property>
</bean>
JobFactory.java类
package com.es.quartz;
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
/**
* @author Anson<br>
* Copyright by EasyShare 2018<br>
*
* All right reserved<br>
*
* Created on 2018年1月5日 上午2:01:02<br>
* 向quartz中注入由spring管理的service<br>
*/
public class JobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory autowireCapableBeanFactory;
public JobFactory() {
}
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
//调用父类
Object instance = super.createJobInstance(bundle);
//自动注入
autowireCapableBeanFactory.autowireBean(instance);
return instance;
}
}
DBWriter.java类
package com.es.quartz;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
* @author Anson
* Copyright by EasyShare 2017
*
* All right reserved
*
* Created on 2017年6月27日 下午10:34:57
* 用户表的数据写入
*/
public class DBWriter extends QuartzJobBean {
public DBWriter() {
//显示指定默认构造函数
}
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
//保存或更新信息
//插入所需定时执行的方法
}
}