在使用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的問題。第一種方案有空再繼續研究一下。