无法加载驱动程序类:com.mysql.cj.jdbc.Driver

Thu*_*yen 5 mysql spring spring-data-jpa spring-boot

我的 Spring Boot 项目尝试使用 driver 连接到 MYSQL 数据库mysql-connector-java。我已经导入最新的 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>
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

MYSQL版本是8.0.26

在此输入图像描述

春季启动版本2.6.2

在此输入图像描述

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

引起:org.springframework.beans.BeanInstantiationException:无法实例化[com.zaxxer.hikari.HikariDataSource]:工厂方法“dataSource”抛出异常;嵌套异常是 java.lang.IllegalStateException:无法加载驱动程序类:com.mysql.cj.jdbc.Driver at 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: Cannot load driver class: com.mysql.cj.jdbc.Driver at org.springframework.util.Assert.state(Assert.java:97) ~[spring-core- 5.3.14.jar:5.3.14] 在 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.defineDriverClassName(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(本机方法) 〜[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 (NOT com.mysql.cj.jdbc.Driver)的帖子,我无法申请我的项目,因为我的项目在使用时出错,com.mysql.cj.jdbc.Driver但没有com.mysql.jdbc.Driver

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

如何修复此错误?

小智 5

1)在pom.xml中使用此依赖项

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

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

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)


zaw*_*udo 1

您检查过您拥有哪个版本的 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>
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您在 Maven 中心访问它,则来自上面的此依赖项

https://mvnrepository.com/artifact/mysql/mysql-connector-java

现已移至

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.32</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

编辑:

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

截至您共享“mysql版本”的图片,这没有任何意义,例外是关于mysql-connector jar,它与工作台无关,您仍然可以使用工作台版本5,并使用mysql-connector jar版本8 ,这没有什么区别。

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

mysql-connector 8 jar = 需要 .cj

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)

mysql-connector 5 jar = 不需要 .cj

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)

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