关于Spring+MyBatis的MapperScannerConfigurer无法加载place-holder属性问题分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Spring+MyBatis的MapperScannerConfigurer无法加载place-holder属性问题分析相关的知识,希望对你有一定的参考价值。
在1.2.5以下版本的mybatis-spring一下配置可能会无法启动,但junit方式可以启动
配置:
<bean id="sqlSessionFactoryName" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation"
value="${dao.mybatis.sqlSessionFactory.configLocation}" />
</bean>
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer" lazy-init="true">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryName"/>
<property name="processPropertyPlaceHolders" value="true"/>
<property name="basePackage" value="${dao.mybatis.scanner.basePackage}" />
</bean>
启动方式:
ctx = new ClassPathXmlApplicationContext(configFileName);或者是web方式启动
会报属性找不到的错误;但通过junit方式能够正常启动。
具体原因如下:
MapperScannerConfigurer的processPropertyPlaceHolders方法中加入了context类型的判断
if(!prcs.isEmpty() && this.applicationContext instanceof GenericApplicationContext) {
这个会导致采用ClassPathXmlApplicationContext启动的应用跳过了加载属性的动作,从而导致属性找不到。
在1.3.1版本(我看的是1.3.1版本,1.3.0版本没有验证)中该判断改为:
if(!prcs.isEmpty() && this.applicationContext instanceof ConfigurableApplicationContext) {
解决了这个问题;如果碰到这个问题可以通过升级版本解决
本文出自 “天涯时空” 博客,请务必保留此出处http://leshjmail.blog.51cto.com/629172/1909489
以上是关于关于Spring+MyBatis的MapperScannerConfigurer无法加载place-holder属性问题分析的主要内容,如果未能解决你的问题,请参考以下文章
关于Spring+mybatis使用@Transactional注解事物没有生效的问题
关于Spring+MyBatis的MapperScannerConfigurer无法加载place-holder属性问题分析
spring mybatis 关于 basepackage 和 mapperLocations 的通配符匹配实例
企业分布式微服务云SpringCloud SpringBoot mybatis (三十四)关于集成 Spring Cache