【问题标题】:Cannot load driver class: com.mysql.cj.jdbc.Driver无法加载驱动程序类:com.mysql.cj.jdbc.Driver
【发布时间】:2022-01-26 22:14:12
【问题描述】:

我的 Spring Boot 项目尝试使用驱动程序 mysql-connector-java 连接到 MYSQL 数据库。 我已经导入最新的mysql驱动和spring-boot-starter-data-jpa

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

我在application.properties文件中配置了数据库连接

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_example
spring.datasource.username=somethingfunny
spring.datasource.password=somethingfunny
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
#spring.jpa.show-sql: true

MYSQL版本是8.0.26

Spring Boot 2.6.2 版

使用 Intellij 运行项目时出现错误

引起:org.springframework.beans.BeanInstantiationException: 无法实例化 [com.zaxxer.hikari.HikariDataSource]:工厂 方法'dataSource'抛出异常;嵌套异常是 java.lang.IllegalStateException:无法加载驱动程序类: com.mysql.cj.jdbc.Driver 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.14.jar:5.3.14] 在 org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.14.jar:5.3.14] ...省略了35个常用框架造成的 作者:java.lang.IllegalStateException:无法加载驱动程序类: com.mysql.cj.jdbc.Driver 在 org.springframework.util.Assert.state(Assert.java:97) ~[spring-core-5.3.14.jar:5.3.14] 在 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:241) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2] 在 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.initializeDataSourceBuilder(DataSourceProperties.java:193) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2] 在 org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.createDataSource(DataSourceConfiguration.java:48) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2] 在 org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari.dataSource(DataSourceConfiguration.java:90) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)~[na:na] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] 在 java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] 在 org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.14.jar:5.3.14] ...省略了36个常用框架

我参考了关于Cannot load driver class: com.mysql.jdbc.Driver(不是com.mysql.cj.jdbc.Driver)的帖子,我无法申请我的项目,因为我的项目在使用com.mysql.cj.jdbc.Driver而不是com.mysql.jdbc.Driver时出错。

我还参考了这篇文章Cannot load driver class: com.mysql.cj.jdbc.Driver。但是我找不到这个错误的正确答案(答案被标记为更正)。

如何解决这个错误?

【问题讨论】:

  • 查看你使用的JDK版本

标签: mysql spring spring-boot spring-data-jpa


【解决方案1】:

1) 在 pom.xml 中使用这个依赖

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

2) 在您的 application.properties 文件中使用此属性

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

【讨论】:

    【解决方案2】:

    我已经解决了这个问题。在 Intellij 中右键单击项目,选择 maven,选择重新加载项目。现在 Intellij 会将 mysql 驱动程序添加到项目中

    【讨论】:

      【解决方案3】:

      您是否检查过您拥有的 MySQL 连接器版本?

      由于您尚未在 pom.xml 中指定版本,因此它可能会提取版本 5,现在它抱怨版本 8 所需的 .cj。

      这可能是它在没有 .cj ( com.mysql.jdbc.Driver ) 的情况下工作的原因,因为它提取了版本 5。 在 pom.xml 中手动添加版本并保持 .cj 不变。

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

      之后确保你拉取你的依赖。 但是,如果您在“mvn clean install”之后只有版本 8,请确保签入您的项目。

      从你分享的“mysql版本”的图片来看,没有任何意义,例外是关于mysql-connector jar,它与工作台无关,你仍然可以拥有工作台版本5,并使用mysql-connector jar 版本 8,它不会有任何区别。

      在任何版本的 mysql workbench(5 或 8)中:

      mysql-connector 8 jar = 需要 .cj

      mysql-connector 5 jar = 不需要 .cj

      您唯一需要做的就是在 pom.xml 中定义 mysql-connector-java 的版本

      【讨论】:

        【解决方案4】:

        将设置 jdbc 驱动程序类的行修复如下:我认为这并不重要,但驱动程序类名称更常见。并检查您的构建文件是否是最新的。不妨尝试使用 pom.xml 重新构建

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

        【讨论】:

        • 她已经说过“我的项目在使用 com.mysql.cj.jdbc.Driver 而不是 com.mysql.jdbc.Driver 时出错。”我不认为将密钥重命名为 driver-class-name 会有帮助。
        • com.mysql.jdbc.Driver -> com.mysql.cj.jdbc.Driver 与 mysql 版本相关,我没有说什么。我确实说过我认为这并不重要,但如果它可以解决它,请尝试。我确实说过要重新构建它,因为通常可以修复它。是的,你去。正如您从 OP 的回答中看到的那样,这是一种简单的再次构建和修复的交易。
        猜你喜欢
        • 2018-05-09
        • 1970-01-01
        • 2020-03-12
        • 2020-10-27
        • 2021-11-09
        • 2015-01-27
        • 2017-05-17
        • 2020-03-18
        相关资源
        最近更新 更多