问题描述
- SSM项目结合 druid 来作为连接MySQL的数据库连接池,项目正常启动,但是在处理请求访问数据库时报错;
- 如果不使用数据库连接池,一切正常。
报错内容:
Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: validateConnection false
问题分析
- 显然,是使用了的druid才出现问题,因此,它也是报错的核心。很多错误要么是代码和配置,要么是环境。
- 先来排除第一种。有文章表示,新版的 druid 会有一个 validate 的动作,但是我尝试过不使用 druid , 运行正常,因此排除是配置或者代码问题
- 那么只能是环境问题。该项目中的MySQL和 Druid 的版本是:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
- 查看 maven 在 druid 对应的版本可以看到, Druid和很多依赖是有对应关系的
进入对应版本的页面,查看与之对应的MySQL驱动版本
https://mvnrepository.com/artifact/com.alibaba/druid/1.0.9
问题解决
定位到了问题,那么修改 MySQL驱动的版本,修改后通过测试。修改后如下:
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>