• mybatis-spring集成:配置多数据库源中遇到的问题


    转自:http://www.cfanz.cn/index.php?c=article&a=read&id=71583
    mybatis配置多数据源本身很简单,和基本配置差别不大

    但是如果要配置自动扫描mapper文件,可能会遇到一点儿问题

    只有一个数据源时,只需要指定包就可以了,比如

    <!-- 扫描映射器,自动创建 --> 
    < bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
     <property name="basePackage" value="...*" /> 
    < /bean>
    而有多个数据源时,还需要指定使用哪一个sqlSession,在mybatis-spring的中文文档中,提到用sqlSessionFactory或sqlSessionTemplate属性来配置数据源,文档:

    注意,没有必要去指定SqlSessionFactory或SqlSessionTemplate,因为MapperScannerConfigurer将会创建MapperFactoryBean,之后自动装配。但是,如果你使用了一个以上的DataSource(因此,也是多个的 SqlSessionFactory),那么自动装配可能会失效。这种情况下,你可以使用sqlSessionFactory或 sqlSessionTemplate属性来设置正确的工厂/模板。  

    配置为:

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
     <property name="basePackage" value="..." /> 
     <property name="sqlSessionFactory" ref="fsasSqlSessionFactory"></property> 
    < /bean> 

    当这样配置时,如果数据源DataSource的属性中使用了properties属性,那么就会报异常:

    <!-- 配置dbcp连接池,注意要加入它的第三包jar包 --> 
    < bean id="fsasDataSource" class="org.apache.commons.dbcp.BasicDataSource" 
     destroy-method="close"> 
     <property name="driverClassName" value="${jdbc.driverClassName}" /> 
     <property name="url" value="${fsas.url}" /> 
     <property name="username" value="${fsas.username}" /> 
     <property name="password" value="${fsas.password}" /> 
    < /bean> 

    异常信息:

    2013-3-28 1:37:57 WARN [com.mchange.v2.c3p0.DriverManagerDataSource:107] - Could not load driverClass ${jdbc.driverClass}  

    java.lang.ClassNotFoundException: ${jdbc.driverClass}  

    查看官方英文文档发现,有专门提醒:

    NOTE sqlSessionFactoryBean and sqlSessionTemplateBean properties were the only option available up to MyBatis-Spring 1.0.2 but given that the MapperScannerConfigurer runs earlier in the startup process thatPropertyPlaceholderConfigurer there were frequent errors. For that purpose that properties have been deprecated and the new properties sqlSessionFactoryBeanName and sqlSessionTemplateBeanName are recommended.
     
    大概意思是:MapperScannerConfigurer初始化的时候,PropertyPlaceholderConfigurer还没有将properties的参数值替换,所有导致直接将参数名,如“${jdbc.driverClassName}”设置到dataSource的字段属性中。
     
    同时,官方已经弃用了采用sqlSessionFactoryBean 和 SesionTemplateBean的方式进行配置,而推荐使用sqlSessionFactoryBeanName 和  sqlSessionTemplateBeanName
    所以正确的配置应该为:

    <!-- 扫描映射器,自动创建 --> 
    < bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
     <property name="basePackage" value="..." /> 
     <property name="sqlSessionTemplateBeanName" value="fsasSqlSession" /> 
    < /bean>  

  • 相关阅读:
    51nod 237 最大公约数之和 V3 杜教筛
    luogu P4213 【模板】杜教筛(Sum)
    BZOJ 3527: [Zjoi2014]力 FFT
    凸多边形 HRBUST
    luogu P1354 房间最短路问题 计算几何_Floyd_线段交
    几何基础
    BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 Hash + Splay
    BZOJ3529: [Sdoi2014]数表 莫比乌斯反演_树状数组
    BZOJ 2820: YY的GCD 莫比乌斯反演 + 数学推导 + 线性筛
    迭代器,三元表达式,列表生成式,字典生成式,生成器,递归(没深入理解)
  • 原文地址:https://www.cnblogs.com/dead-trap-ramble/p/3499730.html
Copyright © 2020-2023  润新知