Quartz创建Job无法注入接口实例的问题

在使用Quartz的时候,遇到了一个问题困扰了好久

就是在执行Job的时候,发现父类封装的一些Dao方法无法使用,断点一执行到相应位置就结束了,并且不报任何错误

也算范低级错误了,后来才想到,Exception没有捕获的就不报任何错误
后来写了try/catch,发现原来是要注入的Dao,获取的对象都是空

才明白是没有注入接口实现

可是自己明明在Spring中定义了Job的Bean

----------------------
后来明白,在创建Job时,代码如下
JobDetail initJob = new JobDetail("initJob", "InitGroup",  
				InitJob.class);

这样写其实是通过反射的方式创建的Job类,并不是通过Spring来创建的,所以他不会注入父类中封装的Dao

具体的方法可以如下
		<!--定时器任务配置(开始)-->	 
	<!--配置JOB-->
<!--方法一-->
	<bean id="initJobDetail"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="initJob" />
		<property name="targetMethod" value="executeA" />
<!-- 		<property name="arguments" /> -->
	</bean>
<!--方法二-->
<!-- 	<bean name="initJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> -->
<!--         <property name="jobClass" value="com.xxx.services.InitJob" /> -->
<!--     </bean> -->

第一种方法就是通过Spring中Quartz的Factory工厂来创建Job的,这样就可以通过Spring注入接口实例了

第二种则是和使用Java代码的方式相同,指定class类,实际上还是Quartz内部通过反射来实现,并没有使用Spring注入

猜你喜欢

转载自liyunpeng.iteye.com/blog/1812725
今日推荐