首页 > 代码库 > Quartz入门实例14-让Quartz的Job使用Spring注入的Bean
Quartz入门实例14-让Quartz的Job使用Spring注入的Bean
<!-- 由spring生成scheduler --> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!--<property name="jobFactory"> <bean class="cn.zto.job.JobBeanJobFactory"/> </property>--> <property name="schedulerName" value=http://www.mamicode.com/"scheduler"/>>
由于将Scheduler交给Spring生成, SchedulerFactoryBean有个jobFactory属性 而且jobFactory是实现SchedulerContextAware的类还要继承AdaptableJobFactory
jobFactorySet是个默认为false的boolean类型的
在Spirng-context-support jar包下org.springframework.scheduling.quartz包中有个SpringBeanJobFactory的类继承了AdaptableJobFactory实现AdaptableJobFactory
spring会默认使用这个给jobFactory
我们可以继承SpringBeanJobFactory重写他的createJobInstance方法
当Spring在加载配置文件时,如果配置文件中有Bean实现了ApplicationContextAware接口时
Spring会自动调用setApplicationContext方法
我们可以通过这个获取Spring上下文然后在创建Job时让Job自动注入到Spring容器中
JobBeanJobFactory.class
package cn.zto.job; import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.scheduling.quartz.SpringBeanJobFactory; public class JobBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { private ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { Object jobInstance = super.createJobInstance(bundle); //把Job交给Spring来管理,这样Job就能使用由Spring产生的Bean了 applicationContext.getAutowireCapableBeanFactory().autowireBean(jobInstance); return jobInstance; } }
xml配置
<!-- 由spring生成scheduler --> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobFactory"> <bean class="cn.zto.job.JobBeanJobFactory"/> </property> <property name="schedulerName" value=http://www.mamicode.com/"scheduler"/>>
还可以使用Spring的AOP机制
详情的话可以查看这个地址
http://sulong.me/2011/09/05/inject_dependency_to_domain_by_spring
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。