Quartz与Spring集成 Job如何自动注入Spring容器托管的对象
来源:互联网 发布:网络配音招聘 编辑:程序博客网 时间:2024/06/05 10:03
测试环境 Spring3 M2 quartz-2.1.7
http://www.cnblogs.com/daxin/p/3608320.html
我们要达到这样的效果
public class CancelUnpaidOrderTask implements Job { @Autowired private AppOrderService orderService; @Override public void execute(JobExecutionContext ctx) throws JobExecutionException { ...}
但是Job对象的实例化过程是在Quartz中进行的,AppOrderService是在Spring容器当中的,那么如何将他们关联到一起呢。好在Quartz提供了JobFactory接口,让我们可以自定义实现创建Job的逻辑。
public interface JobFactory { Job newJob(TriggerFiredBundle bundle, Scheduler scheduler) throws SchedulerException;}
那么我们通过实现JobFactory 接口,在实例化Job以后,在通过ApplicationContext 将Job所需要的属性注入即可
在Spring与Quartz集成时 用到的是org.springframework.scheduling.quartz.SchedulerFactoryBean这个类。源码如下,我们只看最关键的地方。
// Get Scheduler instance from SchedulerFactory. try { this.scheduler = createScheduler(schedulerFactory, this.schedulerName); populateSchedulerContext(); if (!this.jobFactorySet && !(this.scheduler instanceof RemoteScheduler)) { // Use AdaptableJobFactory as default for a local Scheduler, unless when // explicitly given a null value through the "jobFactory" bean property. this.jobFactory = new AdaptableJobFactory(); } if (this.jobFactory != null) { if (this.jobFactory instanceof SchedulerContextAware) { ((SchedulerContextAware) this.jobFactory).setSchedulerContext(this.scheduler.getContext()); } this.scheduler.setJobFactory(this.jobFactory); } }
其中红色标记的是重点,如果我们不指定jobFactory,那么Spring就使用AdaptableJobFactory。我们在来看一下这个类的实现
接下来把他配置到Spring当中去
<bean id="jobFactory" class="com.gary.operation.jobdemo.demo1.MyJobFactory"></bean>
然后在把org.springframework.scheduling.quartz.SchedulerFactoryBean的jobFactory设置成我们自己的。
<bean name="MyScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 其他属性省略 --> <property name="jobFactory" ref="jobFactory"></property></bean>
这样就完成了Spring对Job的注入功能,其实很简单,原理就是在我们扩展JobFactory创建job的方法,在创建完Job以后进行属性注入。
阅读全文
0 0
- Quartz与Spring集成 Job如何自动注入Spring容器托管的对象
- Quartz与Spring集成 Job如何自动注入Spring容器托管的对象
- Quartz与Spring集成 Job如何自动注入Spring容器托管的对象
- quartz 与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- Quartz与Spring的整合-Quartz中的job如何自动注入spring容器托管的对象
- JUnit与Spring的整合——JUnit的TestCase如何自动注入Spring容器托管的对象
- JUnit与Spring的整合——JUnit的TestCase如何自动注入Spring容器托管的对象
- quartz的job中注入spring对象!
- 解决quartz的job无法注入spring对象
- quartz job 注入 spring 管理的 bean
- Quartz的使用(解决quartz的job无法注入spring对象)
- Quartz与Spring的集成
- Quartz与Spring的集成
- 如何在quartz的job中实现spring的依赖注入
- 机械键盘各类轴的区别
- json和gson傻傻分不清楚
- 如何理解Android里的同步和异步的区别
- AMD/CMD/CommonJs 模块化区别?
- Eclipse正则表达式替换
- Quartz与Spring集成 Job如何自动注入Spring容器托管的对象
- TIOBE 10 月编程语言排行榜:Swift 正过时?
- 明天就要上班了,这是我的心情...
- 在线API工具
- 几种C++多维数组管理方法的性能测试
- 正则表达式基本用法(一)——字符重复出现的次数、文字或(|)、文字选择[]
- MySQL 开发实践 8 问,你能 hold 住几个?
- 游戏中的随机地形生成算法(一)
- 【机器学习实战】第11章 使用 Apriori 算法进行关联分析