关于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 第二种方式

关于java-MyBatis-Spring学后笔记

关于Spring+mybatis使用@Transactional注解事物没有生效的问题

关于Spring+MyBatis的MapperScannerConfigurer无法加载place-holder属性问题分析

spring mybatis 关于 basepackage 和 mapperLocations 的通配符匹配实例

企业分布式微服务云SpringCloud SpringBoot mybatis (三十四)关于集成 Spring Cache