我在配置文件里面配置了一个数据源,数据源参数是根据配置文件加载。数据源在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,所以不会引发提前初始化问题。

最新文章

  1. C++学习笔记 封装 继承 多态 重写 重载 重定义
  2. HBase工程师线上工作经验总结----HBase常见问题及分析
  3. 【BZOJ2243】[SDOI2011]染色 树链剖分+线段树
  4. java语言的认识
  5. DBA_VMware虚拟机安装和简介(案例)
  6. ajax 设置Access-Control-Allow-Origin实现跨域访问
  7. Ubuntu Telnet 配置(openbsd-inetd)
  8. 【原】SparkContex源码解读(二)
  9. 在SystemOut.log中发现HMGR0152W: 检测到CPU 饥饿的消息 &lt;转载&gt;
  10. 截取字符串一之slice
  11. lucene定义自己的分词器将其分成单个字符
  12. spring和springMVC的上下文
  13. sqlserver提高篇
  14. svg snap 笔记
  15. JQ 为未来元素添加事件处理器—事件委托
  16. jquery 导出Excel表格
  17. 最小化安装CentOS7的网卡设置
  18. css3 背景色 实现边框渐变运动动画
  19. C++ STL常用容器基本用法汇总
  20. QT linux

热门文章

  1. kendoui仪表盘和柱状图 示例
  2. 重启Windows的PowerShell
  3. java判断一个字符串是否包含某个字符
  4. Wide and Deep Learning Model
  5. 条件随机场(CRF)原理和实现
  6. Cognos11中关于CJAP第三方认证的相关配置
  7. 安装QT的时候出现PATH_MAX错误
  8. 有用的java工具
  9. clearfix 兼容IE6/IE7,解决ie6/ie7下多出一行的问题,bootstrap的clearfix的bug
  10. 全国第二届Revit开发实战训练营在北京圆满落幕