简介
现在有个需求:
下图中我需要通过@Resource将SpringIOC容器里面的userService给直接注入到job里面,那原生的Quartz不支持,直接调用userService将会出现null
此时就需要改造定时器,将定时器也用SpringIOC容器管理,具体改造如下所示
增加类
/**
* 定时器配置
*
* @author zhangqing
* @date 2017年04月13日
*/
@Configuration
@EnableScheduling
public class QuartzConfig {
@Autowired
private QiYuJobFactory qiYuJobFactory;//job工厂
@Bean
public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setOverwriteExistingJobs(true);
// 延时启动
factory.setStartupDelay(20);
// 自定义Job Factory,用于Spring注入
factory.setJobFactory(qiYuJobFactory);
return factory;
}
}
/**
* FactoryBean
*
* @author zhangqing
* @date 2017年04月13日
*/
@Component
public class QiYuJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
// 调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
// 进行注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
修改
之前的SchedulerManager和QuartzManager做了一下改动,名字我也该了将QuartzManager改成了SchedulerUtil,感觉更加合适了。将这两个类也给SpringIOC去管理了。
SchedulerUtil类里面改造了一下,注入了Scheduler。下载文件