数据库连接失败spring: datasource: type: com.alibaba.druid.pool.DruidDataSource # driverClassName: org.mariadb.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver druid: # 主库数据源 master: #test # url: jdbc:mysql://59.110.60.119:3306/WaterQuality # username: mydb # password: 123456 #production # url: jdbc:mysql://114.116.210.210:9527/water_jzyz # username: waterjzyz # password: waterjzyz@890 #使用本地的 # url: jdbc:mysql://8.142.164.112:3306/water_jzyz # username: root # password: root url: jdbc:mysql://localhost:3307/waterquality username: root password: root # # 从库数据源 slave: # 从数据源开关/默认关闭 enabled: false url: username: password: # 初始连接数 initialSize: 5 # 最小连接池数量 minIdle: 10 # 最大连接池数量 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最大生存的时间,单位是毫秒 maxEvictableIdleTimeMillis: 900000 # 配置检测连接是否有效 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false webStatFilter: enabled: true statViewServlet: enabled: true # 设置白名单,不填则允许所有访问 allow: url-pattern: /druid/* # 控制台管理用户名和密码 login-username: dllcsoft login-password: dllcsoft filter: stat: enabled: true # 慢SQL记录 log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true
时间: 2025-07-20 20:14:51 浏览: 5
<think>嗯,用户遇到了Spring中数据库连接失败的问题,具体报错是com.mysql.cj.jdbc.Driver和DruidDataSource相关。这应该是配置MySQL JDBC驱动时出现的典型问题。
用户可能正在开发Spring Boot项目,使用了Druid连接池和MySQL数据库。从报错信息看,核心问题很可能是驱动类加载失败,常见原因包括:驱动jar包缺失、版本不匹配、类名拼写错误或Druid配置不当。
让我梳理几个关键排查方向:
第一要确认驱动依赖。用户提供的引用[2]提到mysql-connector-java版本问题,这很关键。现在MySQL 8+必须用cj.jdbc.Driver,且版本要匹配。需要检查pom.xml是否正确定义了<mysql.version>属性,比如8.0.28版本示例。
第二检查Druid配置。用户提到DruidDataSource,要特别注意spring.datasource.druid.driver-class-name属性是否显式设置为com.mysql.cj.jdbc.Driver。如果没配置,Druid可能自动加载旧版驱动导致失败。
第三验证连接参数。url里useSSL和时区设置常被忽略,MySQL 8需要显式关闭SSL(useSSL=false)并指定serverTimezone,比如Asia/Shanghai。
第四查看依赖冲突。用户使用Maven可能存在驱动包被覆盖的情况,可以用mvn dependency:tree排查。特别要注意是否同时存在mysql-connector-java和旧版mysql-connector的冲突。
第五检查日志细节。Druid的create connection error会输出具体堆栈,如果提示"Loading class `com.mysql.jdbc.Driver' is deprecated"就肯定是驱动类用错了。
最后想到一个易错点:Spring Boot 2.7+默认不包含数据库驱动,必须显式声明依赖,这点和早期版本不同。
用户可能需要分步操作指导,所以回答里要给出具体配置示例和命令。另外生成的问题要覆盖驱动原理、连接池优化等延伸知识点,帮助用户建立系统认知。</think>### Spring数据库连接失败问题排查指南(com.mysql.cj.jdbc.Driver + Druid)
#### 1. **检查MySQL驱动依赖(核心步骤)**
```xml
<!-- pom.xml 示例 -->
<properties>
<java.version>1.8</java.version>
<mysql.version>8.0.33</mysql.version> <!-- 推荐最新稳定版 -->
</properties>
<dependencies>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.18</version>
</dependency>
</dependencies>
```
**验证步骤**:
1. 执行 `mvn dependency:tree | grep mysql` 确认驱动版本
2. 检查是否存在版本冲突(如旧版 `mysql-connector-java:5.x`)
#### 2. **Druid配置检查(application.yml)**
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/yourdb?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: yourpassword
driver-class-name: com.mysql.cj.jdbc.Driver # 关键配置
type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 5
min-idle: 5
max-active: 20
validation-query: SELECT 1 # 连接校验
```
#### 3. **常见错误原因排查
- **驱动类名错误**:
- 正确:`com.mysql.cj.jdbc.Driver`(MySQL 8.0+)
- 错误:`com.mysql.jdbc.Driver`(旧版)
- **JDBC URL格式问题**:
```diff
- jdbc:mysql://localhost:3306/db
+ jdbc:mysql://localhost:3306/db?serverTimezone=Asia/Shanghai&characterEncoding=utf8
```
- **依赖冲突**:
检查是否有其他数据源依赖:
```bash
mvn dependency:tree | grep -E 'mysql|druid|pool'
```
#### 4. **日志分析关键点
查看错误日志中的 **Caused by** 部分:
```
Caused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
```
此错误表明驱动类未加载,需检查依赖[^1]。
#### 5. **解决方案流程
```mermaid
graph TD
A[连接失败] --> B{检查驱动依赖}
B -->|缺失| C[添加mysql-connector-java依赖]
B -->|存在| D{检查驱动类名}
D -->|错误| E[修改为com.mysql.cj.jdbc.Driver]
D -->|正确| F{检查JDBC URL}
F -->|时区/SSL问题| G[添加serverTimezone参数]
F -->|正确| H{检查Druid配置}
H -->|validationQuery缺失| I[配置SELECT 1]
H -->|正确| J[查看网络/数据库状态]
```
#### 6. **终极验证代码
```java
// 手动加载驱动测试(仅用于诊断)
Class.forName("com.mysql.cj.jdbc.Driver");
try (Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test?serverTimezone=UTC",
"user", "pass")) {
System.out.println("连接成功!");
}
```
#### 引用说明:
> [^1]: 当出现 `ClassNotFoundException: com.mysql.cj.jdbc.Driver` 时,表明 JVM 无法加载 MySQL 驱动类,通常由依赖缺失或版本不匹配导致[^1]。
> [^2]: MySQL 8.0+ 必须使用 `cj.jdbc.Driver` 驱动类,且 JDBC URL 需显式指定时区参数(如 `serverTimezone=Asia/Shanghai`)[^2]。
---
###
阅读全文
相关推荐

















