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

升级mysql-connector-java至8.0.31+后出现JDBC驱动找不到问题求助

问题分析与解决

你遇到的报错信息:

java.sql.SQLException: No suitable driver found for jdbc:mysql://feldspar:3306/sndm

本质是JDBC SPI驱动自动加载机制失效,和mysql-connector-java 8.0.31及以上版本的打包特性、maven-shade-plugin的配置有关,并非connector的已知bug,而是配置适配问题。

核心原因

JDBC 4.0+依赖SPI(服务提供者接口)自动加载驱动,要求最终JAR包中存在META-INF/services/java.sql.Driver文件,且文件内容指向驱动类com.mysql.cj.jdbc.Driver。

当你将mysql-connector-java依赖标记为<optional>true</optional>并使用maven-shade-plugin打包时:

  • 8.0.30及以下版本:shade插件默认会自动合并该依赖的SPI文件;
  • 8.0.31及以上版本:shade插件默认不会处理optional依赖的SPI文件,导致最终JAR中缺失驱动注册信息,DriverManager无法识别JDBC URL对应的驱动。

解决方案

修改maven-shade-plugin的配置,显式添加ServicesResourceTransformer,强制合并所有依赖的SPI服务文件:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>3.4.1</version> <!-- 使用适配Java 11的插件版本 -->
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <!-- 合并所有依赖的SPI服务注册文件 -->
          <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
          <!-- 保留原有其他transformer配置(如主类指定等) -->
        </transformers>
      </configuration>
    </execution>
  </executions>
</plugin>

验证步骤

  • 重新打包后,检查最终JAR包内是否存在META-INF/services/java.sql.Driver文件;
  • 打开该文件,确认内容为com.mysql.cj.jdbc.Driver;
  • 运行程序,验证驱动加载正常。

额外提示

如果上述配置未解决问题,可以尝试:

  • 移除依赖的<optional>true</optional>(若你的打包逻辑允许);
  • 在代码中显式调用Class.forName("com.mysql.cj.jdbc.Driver")强制加载驱动(不推荐,违背JDBC 4.0+规范,但可作为临时 workaround)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:45:55