zoukankan      html  css  js  c++  java
  • spring+mybatis整合读取不了配置文件

    报错如下:

    java.sql.SQLException: unkow jdbc driver : ${jdbc.url}
    其余错误就不贴了,主要原因是没有读取到配置文件

    读取配置文件代码:

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="true">
      <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
      <property name="ignoreResourceNotFound" value="true" />
      <property name="locations">
        <list>
          <value>classpath:jdbc.properties</value>
        </list>
      </property>
    </bean>
    

      

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
      <property name="url" value="${jdbc.url}" />
      <property name="username" value="${jdbc.username}" />
      <property name="password" value="${jdbc.password}" />
     此处省略连接池设置代码(和此错误无关)
    </bean>
    

    mybatis代码

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="mapperLocations" value="classpath:/com/kt/mybatis/gis/mapper/*Mapper.xml" />
      <property name="typeAliasesPackage" value="com.kt.mybatis.model" />
    </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">   <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">   <property name="basePackage" value="com.kt.mybatis.gis.dao,com.kt.mybatis.model" />   <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- 配置Spring的事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   <property name="dataSource" ref="dataSource" /> </bean> <!-- 使用annotation定义数据库事务 scope="request",这样可以在类或方法中直接使用@Transactional注解来声明事务 --> <tx:annotation-driven transaction-manager="transactionManager" />

    解决办法:将mybatis代码段中标颜色的改个名字

    原因:看网上资料说,是因为在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到properties文件里的内容。 导致这一原因是因为,MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候,PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当作字符串复制了。 但如果不设置sqlSessionFactory 属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory ,否则就无法自动注入。又或者直接定义 MapperFactoryBean ,再或者放弃自动代理接口方式。

    http://www.oschina.net/question/188964_32305

    ps:本文为博主原创,转载请注明出处:http://www.cnblogs.com/Y-zhiwei/。

  • 相关阅读:
    cmake自动添加宏定义
    Wapiti web扫描工具使用——支持ssl,看官方示例报告就知道如何支持带cookie和用户名密码的扫描了
    AI入门(重实践)书籍推荐
    初探零信任模型——就是假设所有的设备、人员等都是不可信的,在此基础上构建安全策略
    概率论疑难问题---7、通俗理解最小二乘法
    概率论疑难问题---6、极大似然估计
    概率论疑难问题---5、通俗理解中心极限定理
    matplotlib画直方图
    numpy数组添加元素
    概率论疑难问题---4、通俗理解概率论中的“矩”
  • 原文地址:https://www.cnblogs.com/Y-zhiwei/p/6146927.html
Copyright © 2011-2022 走看看