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