首页 > 代码库 > 关于Spring+MyBatis的MapperScannerConfigurer无法加载place-holder属性问题分析

关于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属性问题分析