Spring和Mybatis整合时无法读取properties的处理方案

<!-- 使用druid开源数据库连接池 -->
   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
         init-method="init" destroy-method="close">
           
          <property name="driver" value="${mop.cms.driver.class}"/>
          <property name="url" value="${mop.cms.jdbc.url}" />
          <property name="username" value="${mop.cms.jdbc.username}" />
          <property name="password" value="${mop.cms.jdbc.password}" />

          <property name="initialSize" value="${mop.cms.druid.initialSize}" />
          <property name="minIdle" value="${mop.cms.druid.minIdle}" />
          <property name="maxActive" value="${mop.cms.druid.maxActive}" />

          <property name="maxWait" value="${mop.cms.druid.maxWait}" />

          <property name="timeBetweenEvictionRunsMillis"
                    value="${mop.cms.druid.timeBetweenEvictionRunsMillis}" />

          <property name="minEvictableIdleTimeMillis"
                    value="${mop.cms.druid.minEvictableIdleTimeMillis}" />

          <property name="validationQuery" value="${mop.cms.druid.validationQuery}" />
          <property name="testWhileIdle" value="${mop.cms.druid.testWhileIdle}" />
          <property name="testOnBorrow" value="${mop.cms.druid.testOnBorrow}" />
          <property name="testOnReturn" value="${mop.cms.druid.testOnReturn}" />

          <property name="poolPreparedStatements" value="${mop.cms.druid.poolPreparedStatements}" />

   </bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>

<!-- mybatis session factory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="classpath:sqlmap-config.xml" />
    <property name="dataSource" ref="dataSource" />
</bean>

<!-- 开启事务 -->
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<!-- 会自动将basePackage中配置的包路径下的所有dao -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    <property name="basePackage" value="com.meizu.mop.cms.mapper" />
</bean>

 此时,启动会报异常,${mop.cms.driver.class}这样的表达式获取不到properties里面的值,因为MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了,解决的办法如下:

 

方法一:

修改<property name="sqlSessionFactory" ref="sqlSessionFactory"/>为

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

原理:使用sqlSessionFactoryBeanName注入,不会立即初始化sqlSessionFactory, 所以不会引发提前初始化问题。

 

方法二:

直接删掉<property name="sqlSessionFactory" ref="sqlSessionFactory"/>

注意:在没有配置这一行时,必须配置一个以sqlSessionFactory命名的org.mybatis.spring.SqlSessionFactoryBean。



转载于:https://my.oschina.net/jeeker/blog/524899

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值