Spring-quartz整合

来源:互联网 发布:宏晶单片机 编辑:程序博客网 时间:2024/05/29 15:55

版本:

  • 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 {@Autowiredprivate 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
原创粉丝点击