您的位置:首页 > 其它

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)  配置具体操作的类

      

<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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: