在使用Quartz的时候,遇到了一个问题困扰了好久
就是在执行Job的时候,发现父类封装的一些Dao方法无法使用,断点一执行到相应位置就结束了,并且不报任何错误
也算范低级错误了,后来才想到,Exception没有捕获的就不报任何错误
后来写了try/catch,发现原来是要注入的Dao,获取的对象都是空
才明白是没有注入接口实现
可是自己明明在Spring中定义了Job的Bean
----------------------
后来明白,在创建Job时,代码如下
这样写其实是通过反射的方式创建的Job类,并不是通过Spring来创建的,所以他不会注入父类中封装的Dao
具体的方法可以如下
第一种方法就是通过Spring中Quartz的Factory工厂来创建Job的,这样就可以通过Spring注入接口实例了
第二种则是和使用Java代码的方式相同,指定class类,实际上还是Quartz内部通过反射来实现,并没有使用Spring注入
就是在执行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注入