Quartz定时任务 踩到的坑
无法注入service 或 @Autowired 注入为null
在springboot集成quartz时,在quartzJob注入redisService时,一直报null
开始一直以为是spring哪里配置不对,经过“小度度”才知道是quartz 的配置原因
需要调整的地方有两个:
1、添加一个类 MyJobFactory
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;
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;
}
}
2、第二个调整的地方就是把MyJobFactory 加入到配置文件中
/**
* 初始注入scheduler
* @return
* @throws SchedulerException
*/
@Bean
public Scheduler scheduler(SchedulerFactoryBean schedulerFactoryBean) throws SchedulerException{
return schedulerFactoryBean.getScheduler();
}
@Bean
public MyJobFactory jobFactory(){
return new MyJobFactory();
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean(MyJobFactory jobFactory){
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobFactory(jobFactory);
return schedulerFactoryBean;
}
说明:注入bean(MyJobFactory ),将jobFactory放入到SchedulerFactoryBean,在注入scheduler时,获取到SchedulerFactoryBean 的 scheduler;这样就吧自定义的jobFactory添加到配置文件中了。
自测代码,完美通关!
博客参考https://blog.csdn.net/huangjp_hz/article/details/70064316