解决 Spring Boot 异常:“Cannot Load Driver Class: com.mysql.jdbc.driver”

1、简介

Spring Boot 中整合 MySQL 时,我们通常依赖 Spring Boot 的自动配置和 JDBC 支持来连接数据库。不过,遇到配置问题的情况并不少见,尤其是在使用 过时的依赖 时。其中一个异常就是:

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

本文将带你了解出现 “Cannot load driver class: com.mysql.jdbc.Driver” 异常的原因以及解决办法。

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

如果在新版本的 MySQL 驱动程序中继续使用旧的类名,应用将无法启动,并出现 ClassNotFoundException 异常。

3、处理问题

要解决这个问题,需要更新 Spring Boot 配置和项目中使用的依赖。

3.1、使用正确的依赖

第一步是在 application.propertiesapplication.yml 文件中新的驱动程序类替换旧的驱动程序类。

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

或者 application.yml 文件:

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

另外,Spring Boot 还能从 classpath 自动检测驱动程类。如果存在正确版本的 MySQL 驱动程序,我们就可以完全省略 driver-class-name 属性。

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 时。

4、测试

更新配置和依赖后,来测试应用程序是否能连接到数据库,以检验修复的效果。

以编写一个简单的集成测试,以确保数据源按预期运行:

@SpringBootTest
class LoadDriverLiveTest {
    @Autowired
    private DataSource dataSource;

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

如果测试通过,则确认 Spring Boot 已成功加载驱动程序类并建立了与 MySQL 数据库的连接。

5、总结

本文介绍了 Spring Boot 中出现 “Cannot load driver class: com.mysql.jdbc.Driver” 异常的原因以及解决办法。

Spring Boot 中使用 JDBC 时,确保依赖和配置之间的兼容性是关键。要了解这方面的详细信息,可以参考 Spring Boot 官方 文档MySQL Connector/J 发布说明


Ref:https://www.baeldung.com/fix-mysql-can-not-find-driver-exception