2. 1. 问题背景

在 Spring Boot 集成 MySQL 时,我们通常依赖其自动配置和 JDBC 支持来连接数据库。但配置不当可能导致异常,尤其是使用过时配置时,常见错误如下:

Cannot load driver class: com.mysql.jdbc.Driver

本文将分析此错误原因、解决方案,并验证数据库连接有效性。

3. 2. 错误根源

这个问题的核心在于使用了过时的 MySQL 驱动类。在旧版 MySQL JDBC 驱动(Connector/J)中,常用以下驱动类:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

但从 MySQL Connector/J 8.0 开始,该类已被废弃并移除。正确的驱动类应为:

com.mysql.cj.jdbc.Driver

⚠️ 若在新版驱动中使用旧类名,应用启动时会抛出 ClassNotFoundException

4. 3. 解决方案

需同时更新 Spring Boot 配置和项目依赖。

4.1. 3.1 使用正确的驱动类

application.propertiesapplication.yml 中更新驱动类名:

properties 方式:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

yaml 方式:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: secret
    driver-class-name: com.mysql.cj.jdbc.Driver

简化方案:Spring Boot 能自动检测类路径中的驱动类。若使用正确版本的 MySQL 驱动,可完全省略 driver-class-name 属性。

4.2. 3.2 更新依赖版本

确保项目使用最新稳定版 MySQL JDBC 驱动

Maven 配置:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>9.2.0</version>
</dependency>

Gradle 配置:

implementation("com.mysql:mysql-connector-j:9.2.0")

❌ 使用过时驱动版本可能导致兼容性问题,尤其搭配新版 Spring Boot 或 Java 时。

5. 4. 验证修复效果

更新配置和依赖后,需验证数据库连接是否正常。可通过集成测试检查 DataSource 工作状态:

@SpringBootTest
class LoadDriverLiveTest {
    @Autowired
    private DataSource dataSource;

    @Test
    void whenConnectingToDatabase_thenConnectionShouldBeValid() throws Exception {
        try (Connection connection = dataSource.getConnection()) {
            assertNotNull(connection);
        }
    }
}

✅ 测试通过表明 Spring Boot 已成功加载驱动类并建立 MySQL 连接。

6. 5. 总结

本文分析了 Spring Boot 中 Cannot load driver class: com.mysql.jdbc.Driver 异常的成因,演示了通过更新驱动类名和项目依赖修复问题的方法,并通过测试验证了修复效果。

在 Spring Boot 中使用 JDBC 时,确保依赖与配置的兼容性至关重要。深入理解可参考:

完整实现代码可在 GitHub 获取。


原始标题:How to Fix Exception: Cannot Load Driver Class: com.mysql.jdbc.driver in Spring Boot | Baeldung