You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0.18连接JUnit测试报错问题求助

解决MySQL 8.0驱动在JUnit测试中的警告问题

我帮你梳理下当前的问题:你已经正确使用了MySQL 8.0的新驱动com.mysql.cj.jdbc.Driver,Java代码本身也能成功连接数据库,但JUnit测试控制台却抛出了旧驱动的警告。这大概率是依赖冲突或者SPI类加载机制的小问题,下面给你几个针对性的修复方案:

1. 排查并排除旧MySQL驱动依赖

虽然你已经在pom里引入了mysql-connector-java:8.0.18,但可能其他依赖(比如log4jdbc这类工具库)偷偷引入了旧版本的mysql驱动。你可以用Maven命令生成依赖树,找出冲突源:

mvn dependency:tree

如果发现有mysql-connector-java的5.x版本被间接引入,就在对应的依赖里添加排除规则,比如假设是log4jdbc带来的旧驱动:

<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    <version>1.16</version>
    <exclusions>
        <exclusion>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2. 解决JUnit版本冲突

你的pom.xml里同时引入了JUnit 4.12和JUnit Jupiter(JUnit 5),这两个版本会导致测试环境的类加载混乱——而你实际使用的是JUnit 4的@Test注解,完全可以移除JUnit Jupiter的依赖:

<!-- 移除这个不必要的依赖 -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>RELEASE</version>
    <scope>test</scope>
</dependency>

只保留JUnit 4的核心依赖即可:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

3. 优化驱动加载方式(可选)

MySQL 8.0的驱动已经支持SPI自动注册,你可以去掉手动加载驱动的代码,避免类加载层面的潜在冲突。修改后的测试方法:

@Test
public void testConnection() throws Exception {
    // 移除Class.forName(DRIVER);这行代码
    try(Connection connection = DriverManager.getConnection(URL, USER, PASSWORD)) {
        System.out.println(connection);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

4. 清理Maven缓存

有时候Maven缓存的旧依赖会导致奇怪的问题,执行以下命令清理缓存并重新构建项目:

mvn clean install -U

按照上面的步骤调整后,再运行JUnit测试,那个旧驱动的警告应该就会消失了。

内容的提问来源于stack exchange,提问作者Ppojin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:45:26