Java 开发 / 数据库

Error running jOOQ code generation tool: com.mysql.cj.jdbc.Driver..

言七墨 · 12月15日 · 2019年 · · 590次已读

问题

今天在用 JOOQ 生成代码的时候,即运行 mvn clean install 命令时,出现以下错误,代码中指定的驱动明明是“com.mysql.jdbc.Driver”,但是报错信息中显示的确是驱动“com.mysql.cj.jdbc.Driver”。

经搜索,

  • com.mysql.jdbc.Driver 是 mysql-connector-java 5 中的
  • com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6 及以上版本中的

但是,我用的 MySQL 连接器也不是 mysql-connector-java 6 及以上版本的:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>

排查

  • 检查引入的外部 jar 包,没问题
  • 网上搜索到这样一句话:

当在项目加入 mysql-connector-java 的依赖,但却不指定版本的时候,SpringBoot 是默认为我们指定了一个版本的。

我代码中指定了 mysql-connector-java 的版本号,并且检查引入的 jar 包也是 5 版本的,故应该不是这里的问题。

  • 通过以上思路,于是我检查了 SpringBoot 指定的默认版本:

通过切换 SpringBoot 版本,发现了真相:

  1. 当 SpringBoot 是 2.0.x.RELEASE 及以下版本时,使用的是我们指定的 5.1.46 版本的 “mysql-connector-java”
  2. 当 SpringBoot 是 2.1.x.RELEASE 及以上版本时,默认使用的是 8.0.13 版本的 “mysql-connector-java”

几个 JDBC 驱动版本的对比

5.1.**版本

  • 建议使用
  • 长期维护更新的版本,最新一版是Jul, 2019维护的5.1.48版本
  • 对应mysql版本5.65.78.0都可以放心使用

6.0.**版本

  • 禁止使用
  • 只有几个 release 版本,没有安全感,已经有一段时间不维护
  • 5.1.**存在一些兼容性的问题

8.0.**版本

  • 酌情使用
  • 尚未经过验证,该版本主要为了兼容MySQL8.0
  • 更新十分频繁
  • 需要JDK8以上

解决

由于这是自己做的一个 demo 项目,当然是怎么方便怎么来,故将 SpringBoot 的版本降级到 2.0.3.RELEASE,问题解决。

0 条回应