Spring-quartz整合

本文档详细介绍了如何在Spring 4.0.3版本中整合Quartz 2.2.1进行任务调度。涵盖了两种实现方式,包括Java类定义及配置,以及实现Spring注入的方法,通过修改jobFactory来托管给Spring管理。同时还提供了完整的配置文件示例和相关代码示例的GitHub链接。
摘要由CSDN通过智能技术生成

版本:

  • Spring版本:4.0.3
  • Quartz版本:2.2.1

声明:

Quartz基础使用请参考“Quartz”一文,这里只记录并总结最新(2015年2月12日)、最全的Spring-quartz整合方案;因近期项目中有一个“接水”需求,而且需要注入service中的一些方法,之前也单独使用并记录过Quartz的基础使用方法,网络上相关文章的泛滥、版本老旧等问题普遍存在,所以在此做一个Spring整合Quartz的全面总结并拓展Quartz一文。

准备:

  • Spring基础jar
  • Quartz基础jar
  • Spring-context-support-4.0.3.RELEASE(重要)
<!--自动扫包 -->
<context:component-scan base-package="*"/>
<!--启动AspectJ支持  -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

第一种实现:

  • Java类:

SimpleJob就是普通java类。

  • applicationContext.xml配置:

<!-- spring整合quartz-->
<!-- jobDetail -->
<bean id="simpleJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
<span style="white-space:pre">	</span>p:targetObject-ref="simpleJob" p:targetMethod="executeInternal" p:concurrent="false"/>
		
<!-- trigger -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"
	p:jobDetail-ref="simpleJobDetail" p:startDelay="0" p:repeatInterval="1000">
</bean>

第二种实现:

  • Java类:
CronJob继承QuartzJobBean类并重写了executeInternal(JobExecutionContext context)方法。
  • applicationContext.xml配置:

	<bean name="cronJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean" 
		p:jobClass="crazyz.itfriday.utils.quartz.CronJob" p:durability="true">
		<property name="jobDataAsMap">
			<map>
				<entry key="refresh" value="60"/>
			</map>
		</property>
	</bean>
		
	<!-- trigger -->
	<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"
		p:jobDetail-ref="cronJobDetail" p:cronExpression="0 0/1 * * * ? *" />

将job托管给spring:
  • Java类:

要实现spring注入需要修改jobFactory,因为job是在jobFactory中创建无法托管给spring所以需要复写相关创建方法:

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;
import org.springframework.stereotype.Component;

@Component(value="jobFactoryWrapper")
public class JobFactoryWrapper extends AdaptableJobFactory {
	@Autowired
	private AutowireCapableBeanFactory capableBeanFactory;
  
	protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
		//调用父类的方法
		Object jobInstance = super.createJobInstance(bundle);
		//进行注入,这属于Spring的技术,不清楚的可以查看Spring的API.
    	capableBeanFactory.autowireBean(jobInstance);
    	return jobInstance;
	}
}


  • applicationContext.xml配置(红色):

<!-- scheduler -->
<bean id="springQuartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" 
        p:jobFactory-ref="jobFactoryWrapper" autowire="no" lazy-init="true">
	<property name="triggers">
		<list>
			<ref bean="simpleTrigger"/>
			<ref bean="cronTrigger"/>
		</list>
	</property>
</bean>

github地址:

https://github.com/710270532/spring-quartz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值