Quartz定時任務 踩到的坑 java
沒法注入service 或 @Autowired 注入爲nullredis
在springboot集成quartz時,在quartzJob注入redisService時,一直報nullspring
開始一直覺得是spring哪裏配置不對,通過「小度度」才知道是quartz 的配置緣由springboot
須要調整的地方有兩個:ide
一、添加一個類 MyJobFactory .net
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; } }
二、第二個調整的地方就是把MyJobFactory 加入到配置文件中code
/** * 初始注入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添加到配置文件中了。blog
自測代碼,完美通關!get
博客參考https://blog.csdn.net/huangjp_hz/article/details/70064316博客