Spring Mvc Mybatis中解决 jdbc dataSource 无法正常赋值问题${}

一、背景说明
       
新搭建了一个项目,框架使用的spring+spring Mvc+Mybatis ,数据库使用的是MySql,项目可正常启动,但是在功能中使用数据库时就出现以下错误信息:

### Error updating database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL '${timer.bin.mysql.url}'
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL '${timer.bin.mysql.url}'
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:76)

二、问题排查
       
首先想到的是Spring 的配置文件没有加载,导致 ${timer.bin.mysql.url} 无法正常赋值导致问题的产生,于是尝试了各种修改web.xml 、spring-mvc配置文件,调整spring 配置文件的加载顺序,始终无法解决问题,详细配置如下所示:

<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
	<property name="ignoreUnresolvablePlaceholders" value="true"/>
	<property name="locations">
		<list>
			<value>classpath:timer-test.properties</value>
		</list>
	</property>
	<property name="fileEncoding">
		<value>UTF-8</value>
	</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="${timer.bin.mysql.url}"/>
	<property name="username" value="${timer.bin.mysql.user.name}"/>
	<property name="password" value="${timer.bin.mysql.user.pwd}"/>
	<!--....-->
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.timer.bin.dao.mapper"/>
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<bean id="transactionManager"
	  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>
 
<tx:annotation-driven transaction-manager="transactionManager"/>

在java代码中直接使用spring的 @Value("${timer.bin.mysql.url}") 给属性赋值,可以正常赋值使用,只有在dataSource 中无法进行正常赋值,始终提示错误 SQLNestedException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL '${timer.bin.mysql.url}'

三、解决方案
问题原因:由于定义 SqlSessionFactoryBean 这个bean时id名称错误的命名为 sqlSessionFactory ,最终导致问题产生
解决方案所示:修改 SqlSessionFactoryBean 这个bean 的id 名称命名为 timerSqlSessionFactory 或任意其他值,解决问题

<bean id="timerSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.timer.bin.dao.mapper"/>
	<property name="sqlSessionFactoryBeanName" value="timerSqlSessionFactory"></property>
</bean>

根本原因:暂未得知,有待考察

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值