在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关类没有注入进来,通过查询相关资料发现是quartz的问题,是job类是没有交给spring来管理.
解决办法:
创建一个jobFactory类
@Configuration public class MyJobFactory extends SpringBeanJobFactory { @Autowired private AutowireCapableBeanFactory capableBeanFactory; @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception{ //调用父类的方法 Object jobInstance = super.createJobInstance(bundle); //进行注入 capableBeanFactory.autowireBean(jobInstance); return jobInstance; } }
@Autowired private MyJobFactory myJobFactory; @Bean(name = "schedulerFactoryBean") public SchedulerFactoryBean schedulerFactory() { SchedulerFactoryBean bean = new SchedulerFactoryBean(); // 延时启动,应用启动1秒后 bean.setStartupDelay(1); bean.setJobFactory(myJobFactory); return bean; }
这样既可注入进来.