Quartz定时器中Service注入时空指针问题解决
2017-10-23 09:39
501 查看
上周在做一个任务调度时,用到了Quartz定时器,用的xml配置方式,随后进行数据库操作时,发现service注入不进去,报空指针错误,然后网上查了一些资料,找到了一个比较好的解决方法,详情如下:
1. 问题:用quartz定时器中的QuartzJobBean进行业务处理时,service对象会报空指针异常
2. 原因:job是在quartz中实例化出来的,不受spring的管理,所以就导致service注入不进去了
3. 解决方法:
1) 在定时器的配置中加入jobDataAsMap,用来向JobDetail传参,配置要注入的service对象
2) 配置具体操作的类
3) 在类中通过getJobDataMap()获取注入成功的service
1. 问题:用quartz定时器中的QuartzJobBean进行业务处理时,service对象会报空指针异常
2. 原因:job是在quartz中实例化出来的,不受spring的管理,所以就导致service注入不进去了
3. 解决方法:
1) 在定时器的配置中加入jobDataAsMap,用来向JobDetail传参,配置要注入的service对象
2) 配置具体操作的类
<bean id="complexJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="data.shijue.scheduling.schedulingStuGraduate" /> <property name="durability" value="true" /> <property name="jobDataAsMap"><!-- 非常重要,用来向JobDetail传参 --> <map> <entry key ="studentPersonService" value-ref="studentPersonService"/> <entry key="timeout" value="5" /> </map> </property> </bean> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="complexJobDetail" /> <!-- 每年的8月15执行 --> <property name="cronExpression" value="1 0 0 15 8 ? *" /> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="complexJobDetail" /> </list> </property> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> </bean> <!-- 工作的bean,一定要配置 --> <bean id="schedulingStuGraduate" class="data.shijue.scheduling.schedulingStuGraduate" />
3) 在类中通过getJobDataMap()获取注入成功的service
public class schedulingStuGraduate extends QuartzJobBean{ /** * 调度 * 每年8月15日0时0分01秒执行该方法 * */ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { try { //通过getJobDataMap()来获取具体的Service studentPersonService= (StudentPersonService) context.getJobDetail(). getJobDataMap().get("studentPersonService"); Map<String, Object> map = new HashMap<String, Object>(); map.put("xjydlb", "1B91DA03-F6FD-42ED-8B8E-D0E8F4BB7E20"); studentPersonService.updateGraduate(map); } catch (Exception e) { e.printStackTrace(); } } @Autowired private StudentPersonService studentPersonService; }
相关文章推荐
- quartz整合Spring注入Service时空指针异常问题解决
- quartz整合Spring注入Service时空指针异常问题解决
- 解决Spring boot使用Quartz时Job中无法注入Bean 空指针异常问题
- springmvc框架定时器功能实现和service注入问题解决
- 第1章 ssm 整合 quartz (解决了无法注入service问题)
- Quartz学习研究(开篇):解决Quartz中的空指针异常问题
- 解决Spring+Quartz无法自动注入bean问题
- java定时器无法自动注入的问题解析(原来Spring定时器可以这样注入service)
- Spring-quartz定时任务service注入问题
- Spring的quartz定时器同一时刻重复执行二次的问题解决
- 用quartz开发调度任无法注入bean,出现空指针问题
- Spring的quartz定时器同一时刻重复执行二次的问题解决
- Spring的quartz定时器重复执行二次的问题解决
- Spring的Quartz定时器同一时刻重复执行二次的问题解决
- 解决Spring Boot 拦截器注入service为空的问题
- jersey和spring集成,不能注入service的问题解决方法
- SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)
- Spring quartz定时任务service注入问题
- Spring boot框架整合quartz,job类中依赖注入报空指针问题