spring 中 quartz job中注入service

在使用quartz的時候,需要注入service或者dao.整合之後發現注入對象爲Null。

發現廣大網友智慧無窮,找到兩種解決方案。

第一:

     第一步:新建一個jobFactory 繼承自 AdaptableJobFactory

public class MyJobFactory extends AdaptableJobFactory {

    //這個對象Spring會幫我們自動注入進來,也屬於Spring技術範疇.
    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;

    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        //調用父類的方法
        Object jobInstance = super.createJobInstance(bundle);
        //進行注入,這屬於Spring的技術,不清楚的可以查看Spring的API.
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

    第二步:將jobFactory配置到spring中

<bean id="jobFactory" class="com.jony.quartz.MyJobFactory"></bean>

    然後在把org.springframework.scheduling.quartz.SchedulerFactoryBean的jobFactory設置成我們自己的

<bean name="MyScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">   <!-- 其他屬性省略 -->   <property name="jobFactory" ref="jobFactory"></property> </bean>

這樣就可以將service注入到job中,但是我這使用不起作用。因此找第二種解決方案

第二種:

在Job的實現方法:execute方法中加入

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

最終爲:

private UserMapper userMapper;//此爲dao,也可爲service
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
    	SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
    	System.out.println(checkLogMapper);
    	System.out.println(userMapper.selectByPrimaryKey("068fd8c830a011e8b08a00163e0af0c7"));
    }
此方法解決了我這service注入爲null的問題。第一種方案有空再繼續研究一下。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章