前言
今天写Quartz定时调度的时候遇到了想调用增删改查操作数据库的情况
这时候在Quartz容器中 直接注入bean 但是会出现bean为空的情况,
一、为什么为空
这种情况是因为Quartz容器 中 它读取不到Spring 容器中的bean,所以我们需要加一些方法让他读到
二、解决方案
1.创建一个QuartzConfig类
@Configuration
public class QuartzConfig {
@Autowired
private CustomJobFactory customJobFactory;
@SneakyThrows
@Bean
public Scheduler scheduler() {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 自定义 JobFactory 使得在 Quartz Job 中可以使用 @Autowired
scheduler.setJobFactory(customJobFactory);
scheduler.start();
return scheduler;
}
}
2.建一个CustomJobFactory类
@Configuration
public class CustomJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory autowireCapableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
autowireCapableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
这时候注入的bean就能用,并且不为空了
总结
踩坑时刻,如对各位有帮助,不胜荣幸,祝各位早日暴富!