您的位置:首页 > 编程语言 > Java开发

Quartz和Spring,Mybatis结合,读数据库空指针(NullPointerException)

2015-12-03 11:15 489 查看
项目中要用定时任务,采用的是Quartz,配置好了可以跑定时了,但是在读数据库的时候报空指针,注入的mapper接口类没有获取到,费了点时间找到了原因,在这里记录下。我的Quartz是这么配置的
<!--Quartz-->
<!-- 集成方式:JobDetailFactoryBean,并且任务类需要继承QuartzJobBean-->
<!-- 定义jobDetail -->
<bean id="jobDetailTest" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- durability 表示任务完成之后是否依然保留到数据库,默认false   -->
<property name="durability" value="true" />
<!--  目标类  -->
<property name="jobClass" value="com.wewolf.schedule.TestTask"></property>
</bean>
<!-- 触发器CornTrigger -->
<bean id="cornTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="jobDetailTest"/>
<!-- 每个10秒触发 -->
<property name="cronExpression" value="0/10 * * * * ?"/>
</bean>

<!-- 定义核心调度器 -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<ref bean="cornTrigger"/>
</property>
</bean>
注入的jobDetail是JobDetailFactoryBean这个类。简单的说就是Quartz和Spring是两个容器,维护的东西不是一套。所以Spring注入的mapper接口类在Quartz中不能通过@Autowired或者@Resource获取到的,所以会报java.lang.NullPointerException。解决方式有几个,我用的解决方式是通过下面这种方式获取Spring注入的类
MailMapper mailMapper = BeanUtil.applicationContext.getBean(MailMapper.class);
还有其他的解决方案,大多是通过别的方式来配置Quartz

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