quartz的job实现类无法注入Service类
原因
Job是在quartz的框架中实例化的,service是在spring容器中创建出来的。
所以Job实现类不受spring管理,即导致注入失败。
解决方案
使用Quartz提供了JobFactory接口,就可以自定义实现创建Job的逻辑,并将jobFactory交给spring容器管理
代码
MyJobFactory类
public class MyJobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory autowireCapableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
//调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
//进行注入,这属于Spring的技术,不清楚的可以查看Spring的API.
autowireCapableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
quartz的xml配置文件
<bean id="jobFactory" class="MyJobFactory"/>
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobFactory" ref="jobFactory"/>
<!--其他属性值省略-->
</bean>
这样就能解决问题。