文档章节

SQLException: Could not open JDBC Connection for

sprouting
 sprouting
发布于 2016/05/12 15:55
字数 705
阅读 373
收藏 1

码上生花,ECharts 作品展示赛正式启动!>>>

今天遇到一个非常有意思的问题,启动项目之后,报错:

严重: Servlet.service() for servlet [taotao-manage] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: ------
java.lang.ClassNotFoundException: ${jdbc.driver}

从字面上看,是数据库找不到驱动,打开maven,驱动是存在的,然后检查配置文件

并没有发现错误,而且之前启动项目是没有问题,查看配置文件:

<!--连接池设置-->
	<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
		  destroy-method="close">
		<!-- 数据库驱动,注意一下它的地址 -->
		<property name="driverClass" value="${jdbc.driver}" />
		<!-- 相应驱动的jdbcUrl -->
		<property name="jdbcUrl" value="${jdbc.url}" />
		<!-- 数据库的用户名 -->
		<property name="username" value="${jdbc.username}" />
		<!-- 数据库的密码 -->
		<property name="password" value="${jdbc.password}" />
		<!--&lt;!&ndash; 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 &ndash;&gt;
		<property name="idleConnectionTestPeriod" value="60" />
		&lt;!&ndash; 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 &ndash;&gt;
		<property name="idleMaxAge" value="30" />-->
		<!-- 每个分区最大的连接数 -->
		<property name="maxConnectionsPerPartition" value="150" />
		<!-- 每个分区最小的连接数 -->
		<property name="minConnectionsPerPartition" value="5" />
	</bean>

也不存在问题,IDEA甚至可以帮你找到配置文件,然后检查数据库连接,数据库是否假死,数据库的密码和用户都没有问题。百度之发现:

在 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?sort=default&p=1#answers

仔细一检查,果然

将配置文件如下替换

<!--<property name="driverClass" value="${jdbc.driver}" />-->
<property name="driverClass" value="com.mysql.jdbc.Driver" />
即不使用${}符号即可。

下面的是大神提供的解决方案:

http://www.lpnote.com/ (大神的博客)@

<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, 所以不会引发提前初始化问题。。

© 著作权归作者所有

sprouting

sprouting

粉丝 18
博文 173
码字总数 65666
作品 0
广州
程序员
私信 提问
加载中
请先登录后再评论。
JDBC 线程安全 数据库连接池

jdbc 是线程安全的,但是,推荐一个线程用一个链接 JDBC is thread safe: It is quite OK to pass the various JDBC objects between threads. For example, you can create the connection......

思齐_
2019/08/11
0
0
数据库中间件 Sharding-JDBC 源码分析 —— JDBC实现与读写分离

摘要: 原创出处 http://www.iocoder.cn/Sharding-JDBC/jdbc-implement-and-read-write-splitting/ 「芋道源码」欢迎转载,保留摘要,谢谢! 本文主要基于 Sharding-JDBC 1.5.0 正式版 1. 概述...

芋道源码
2017/10/22
530
0
关于JDCB连接oracle数据库。

1:什么是JDBC(百度可详细解释) JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接...

osc_851bq07r
2019/03/21
5
0
#数据库#连接数据库的几个步骤

转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/45689023 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1、加载JDBC驱动程序: 在连接数据库之前,首先要加载...

osc_c0r2dsk1
2018/03/14
6
0
JDBC中Class.forName()的作用

使用JDBC时,我们都会很自然得使用下列语句: java 代码 Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8"; ......

村长大神
2014/05/09
67
0

没有更多内容

加载失败,请刷新页面

加载更多

Springboot Actuator

Springboot Actuator 1. 启用springboot actuator <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>dep......

AngerWind
26分钟前
18
0
OSChina 周日乱弹 —— 一个幼小的猕猴桃等待食物转身

1@ 辽元 起床以后, 突然发现时间已经10点啦! 不会晚了吧? 忽然想起来今天是周末, 13 “梦见自己变成猫后,一下子惊醒了,不对是笑醒了。” @冰峰雪座 觉得昨晚的睡眠质量实在不是很好, ...

小小编辑
28分钟前
25
0
【第一行代码--Android】Kotlin入门教程精简版

Google在2017年的I/O大会上宣布Kotlin正式成为Android的以及开发语言,Android Studio也对Kotlin提供了全面支持。 怎样运行kotlin的代码?通过https://try.kotlinlang.org 或者 IDEA 以及 其...

Drop_Table_User
35分钟前
11
0
解决Cannot download "https://github.com/sass/node-sass/releases/download/binding.nod的问题

输入命令解决即可 npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

千年典韦
40分钟前
10
0
测试jar 是否完整有错

cd WEB-INF/lib/for j in *.jar; do echo $j; jar tvf $j > /dev/null ; echo $j done; done

xiaodong16
44分钟前
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部