我在配置文件里面配置了一个数据源,数据源参数是根据配置文件加载。数据源在mybaits和自定义数据工具类中使用,但是启动工程后,报错如下: 
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class '${jdbc.driverClassName}' 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) 

------------------------------
2012年8月28日

通过错误日志,猜测是MapperScannerConfigurer早于PropertyPlaceholderConfigurer初始化的原因。 

尝试将 
Java代码 
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    
 <property name="locations">    
 <list>    
 <value>classpath:resource/conf/jdbc.properties</value>    
 <value>classpath:resource/conf/sys.properties</value>    
 </list>    
 </property>    
 </bean>   
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<property name="locations"> 
<list> 
<value>classpath:resource/conf/jdbc.properties</value> 
<value>classpath:resource/conf/sys.properties</value> 
</list> 
</property> 
</bean> 

修改为 
<util:properties id="jdbcProps" location="classpath:jdbc.properties"/>
使用util:properties替代上面的propertyConfigurer。

***************************************************
2012-12-05
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>

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

-------------------------------------
在3.1.1版本中配置的时候提供了以下:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
<property name="basePackage" value="com.xxxx.dal.mapper" /> 
<property name="sqlSessionFactoryBeanName" value="ysSqlSessionFactory" />
 <!-- <property name="sqlSessionFactory" ref="ysSqlSessionFactory"></property> -->
 </bean>
改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。

Mybaits 使用多数据库源错误 --MapperScannerConfigurer配置的更多相关文章

  1. 在Nutz中如何配置多个数据库源,并且带事务控制

    在Nutz中如何配置多个数据库源,并且带事务控制  发布于 560天前  作者 Longitude 995 次浏览  复制  上一个帖子  下一个帖子  标签: 无 在Nutz中如何配置多个数据库源, ...

  2. CAFFE(FAQ.1):Ubuntu 配置caffe 框架之数据库读取错误:ImportError: No module named lmdb解决办法

    Z: 在安装了caffe框架后需要读取大量的数据进行学习训练.比如在MNIST识别训练中,一般直接读图片会比较耗时,我们一般将图片转存为数据库中.目前主流的数据库有以下两种选择: LevelDB Lm ...

  3. Linux中数据库的安装和配置(MySQL与Maria DB)

    目录 MySQL和Maria DB的介绍 MySQL和Maria DB的安装 yum源安装MySQL(Centos6.5+Mysql5.1) 源码包安装MySQL yum源安装Maria DB 源码包 ...

  4. Mysql5.7.34 数据库源码编译安装

    Mysql 数据库源码编译安装 MySQL是一个关系型数据库管理系统,关系型数据库是将数据保存在不同的表中,而非将所有数据放在一个大仓库内,这样就加快了速度并提高了灵活性.由于其体积小.速度快.总体拥 ...

  5. EDKII Build Process:EDKII项目源码的配置、编译流程[三]

    <EDKII Build Process:EDKII项目源码的配置.编译流程[3]>博文目录: 3. EDKII Build Process(EDKII项目源码的配置.编译流程) -> ...

  6. ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开ORACLE企业管理器(EM)的解决办法

    环境:win7 64位系统. 软件:oracle11g database ,oracle 10g client . 问题描述:在win7 64位系统下安装oracle11g,在创建数据库时,进度到85 ...

  7. EF + MySql 错误:配置错误 无法识别的元素“providers”

    “/”应用程序中的服务器错误. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法识别的元素“providers” ...

  8. 源码编译配置lnmp部署zabbix

    环境说明: [root@wcy ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@wcy ~]# uname -a Linux ...

  9. 【spring boot】12.spring boot对多种不同类型数据库,多数据源配置使用

    2天时间,终于把spring boot下配置连接多种不同类型数据库,配置多数据源实现! ======================================================== ...

随机推荐

  1. jQuery源码分析-构造函数详解

    在jQuery.js的构造函数中,充分利用了JavsScript语言的动态性——对行参的类型和个数没有的严格要求,以至于一个函数可以实现多种功能需求,也为JavaScript语言的多态性提供了基础,在 ...

  2. SVN详细配置与使用 ——一步步教会您使用

    项目管理在项目开发活动中起到非常重要的作用,而对于初学者来说学习有一定的难度,且不说如何使用,就是搭建过程恐怕也要费一般周折,介于此下面就通过图解的方式一步一步详细的教大家如何使用SVN,你只要耐心的 ...

  3. 【Spark】Spark-Redis连接池

    Spark-Redis连接池 jedispool returnresource 遭废弃 用 什么替代_百度知道 spark-stream 访问 Redis数据库示例 - 阿里云 [Redis]Java ...

  4. 转:Parameter Server 详解

    Parameter Server 详解   本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 更多相关博客请猛戳:http://blog.csdn.net/c ...

  5. Java:Linux上java -jar xxx.jar&java -cp 区别

    java -cp java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库和jar包,需要全路径到jar包,多个jar包之间连接符:window上分号“;”.Lin ...

  6. Authentication and Authorization in ASP.NET Web API

      You've created a web API, but now you want to control access to it. In this series of articles, we ...

  7. c++ 中const的使用

    在c++中.const是这么一个东西:假设你希望可以有一些东西是别人不能改动的,这个时候const就起作用了. const 在使用情况例如以下: a.修饰常量 const int a; int con ...

  8. .Net 泛型约束

    本文内容 使用泛型约束的原因 未绑定的类型参数 作为约束的类型参数 参考资料 当"设计模式"出现时,人们提"用接口编程":后来,有了泛型,人们提"用泛 ...

  9. Linux配置流程

    Linux中常用操作命令 http://www.cnblogs.com/laov/p/3541414.html#zhiling Linux下安装jdk并配置环境变量 http://jingyan.ba ...

  10. android studio中为项目添加依赖包的方法

    右键项目,Open Module Settings 打开后选择Dependencies选项卡,点最右边的加号: 选择Libriay dependencies,从下拉列表里面选择就可以了.