quartz定時任務 -- Job沒法自動注入service @Autowired 注入爲null

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博客

相關文章
相關標籤/搜索