Quartz与Spring集成 Job如何自动注入Spring容器托管的对象.docxVIP

  • 15
  • 0
  • 约4.02千字
  • 约 5页
  • 2017-07-09 发布于河南
  • 举报

Quartz与Spring集成 Job如何自动注入Spring容器托管的对象.docx

Quartz与Spring集成 Job如何自动注入Spring容器托管的对象

?Quartz与Spring集成 Job如何自动注入Spring容器托管的对象测试环境 Spring3 M2 ?quartz-2.1.7?我们要达到这样的效果publicclassCancelUnpaidOrderTaskimplements Job { @AutowiredprivateAppOrderServiceorderService; @Overridepublicvoid execute(JobExecutionContextctx) throwsJobExecutionException { ...}但是Job对象的实例化过程是在Quartz中进行的,AppOrderService是在Spring容器当中的,那么如何将他们关联到一起呢。好在Quartz提供了JobFactory接口,让我们可以自定义实现创建Job的逻辑。publicinterfaceJobFactory { Job newJob(TriggerFiredBundle bundle, Scheduler scheduler) throwsSchedulerException;}那么我们通过实现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.schedulerinstanceofRemoteScheduler)) {// 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.jobFactoryinstanceofSchedulerContextAware) { ((SchedulerContextAware) this.jobFactory).setSchedulerContext(this.scheduler.getContext()); }this.scheduler.setJobFactory(this.jobFactory); } }其中红色标记的是重点,如果我们不指定jobFactory,那么Spring就使用AdaptableJobFactory。我们在来看一下这个类的实现packageorg.springframework.scheduling.quartz;importjava.lang.reflect.Method;importorg.quartz.Job;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.spi.JobFactory;importorg.quartz.spi.TriggerFiredBundle;importorg.springframework.util.ReflectionUtils;publicclassAdaptableJobFactoryimplementsJobFactory {public Job newJob(TriggerFiredBundle bundle, Scheduler scheduler) throwsSchedulerException {returnnewJob(bundle); }public Job newJob(TriggerFiredBundle bundle) throwsSchedulerException {try { Object

文档评论(0)

1亿VIP精品文档

相关文档