在使用Quartz与spring整合时,有时需要在Job任务类里注入spring的bean。如下:
那么问题来了,当你启动项目时,会发现报了空指针异常:
查阅资料以及百度之后,终于找到一个解决办法:
spring-content jar包下自带了支持quartz的类,我们写个类继承它:
public class JobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
//调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
//进行注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
AdaptableJobFactory就是org.springframework.scheduling.quartz的类。
完成后。在spring的配置文件里加上:
<bean id="jobFactory" class="com.buoy.util.JobFactory"></bean>
注意class写的是上面的jobFactory所在的包路径
然后,在你配置job调度器的地方添加上属性:
<property name="jobFactory" ref="jobFactory"></property>
这里我的如下:
(关于具体Quartz如何与spring整合,看前面的文章Quartz2.x学习笔记(三):Quartz2.x整合spring )
<!-- 3.定义调度器,并将Trigger注册到调度器中 -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobFactory" ref="jobFactory"></property>
<property name="triggers">
<list>
<!-- <ref bean="simpleTrigger"/> -->
<ref bean="tirggerBuoy"/>
</list>
</property>
<property name="autoStartup" value="true" />
</bean>