就是在执行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注入