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

58
spring.freemarker.cache:false


spring.datasource.url=jdbc:mysql://localhost/mydb
spring.datasource.username=user
spring.datasource.password=pass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

即使已经定义了驱动程序类名,我仍然遇到这个错误。

java.lang.IllegalStateException:无法加载驱动程序类: com.mysql.jdbc.Driver 在 org.springframework.util.Assert.state(Assert.java:392) ~[spring-core-4.2.1.RELEASE.jar:4.2.1.RELEASE] 在 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.java:153) ~[spring-boot-autoconfigure-1.3.0.M5.jar:1.3.0.M5] 在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.java:119) ~[spring-boot-autoconfigure-1.3.0.M5.jar:1.3.0.M5] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_60] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_60] ......

还有更多错误信息。


这意味着你的pom文件中缺少mysql依赖项。请添加它,然后重新加载。 - Elated Coder
15个回答

85
如果您正在使用Maven,请将以下内容添加到您的pom.xml文件中:
(推荐)对于MySQL 5.6、5.7、8.xJava >= 8,请使用;
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version>
</dependency>

(遗留问题)对于MySQL <= 5.5或Java <= 7或JDBC < 4.2,请使用以下代码;
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.49</version>
</dependency>

关于Connector/J版本的更多细节


<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.8</version> </dependency> 我也已经有这个了。 - voidcurser
对于Java版本大于等于8,您可以在pom.xml中使用以下依赖项: com.mysql mysql-connector-j 8.0.31 - aJaY

14

可能是您正在使用已弃用的驱动程序类名称。我通过更新application.properties文件中的属性来解决了这个问题。

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


在最新的Spring版本中,它没有显示为已弃用。 - Arefe
2
是的,但它已被弃用。更多详情请查看下面的链接: https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-api-changes.html - Brijesh

9

请确认以下内容:

  1. 如果您在使用代理,请确保使用VPN连接到内部服务器,如果您正在访问DEV/STG服务器

  2. 请务必将以下依赖项添加到正确的位置,例如这样

    <dependencies> <--- 在此部分中 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency> </dependencies>

而不是在其他位置。

`<build> <--- Not this section
<dependencies>
<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
</dependency>

抱歉,我只能以英文为主要语言进行回答。可以提供需要翻译的内容并以英文书写。
`spring.datasource.driver-class-name=com.mysql.jdbc.Driver. 

spring.datasource.url=jdbc:mysql://xxxxx`可以自动识别要获取哪个驱动程序。


8
如果您正在使用IDEA和Maven,可能会忘记重新加载所有的Maven项目,这会导致依赖项没有MySQL连接器jar。因此,当您运行应用程序时,会出现错误提醒“com.mysql.cj.jdbc.Driver”。

enter image description here


4

我将分享更多导致此错误的原因:

  • 我已经多次在使用Intellij IDEA并运行某些集成测试时看到了这个错误。测试失败并显示以下消息:Caused by: java.lang.IllegalStateException: Cannot load driver class: org.h2.Driver。重新编译项目(Build > Rebuild Project)后,错误消失了。
  • 另一个导致此错误的原因是损坏的JAR文件。一位同事在尝试运行集成测试时也遇到了此错误,并在.m2目录中删除了一些相关的JAR文件,之后该错误就消失了。

4
问题的关键在于您缺少MySQL驱动程序依赖项。
其中一种方法是按照其他答案所述,在构建工具的配置中指定它。但是,如果您不想这样做并且正在使用IntelliJ IDEA(尽管我非常确定Eclipse也有类似的东西),您还可以通过它添加依赖项。步骤:
1.从 maven repository 下载所需的jar包 2.在Intellij IDEA中打开您的项目 3.文件->项目结构->库 4.单击新项目库(左侧的绿色加号)或按Alt + Insert键 5.选择Java 6.选择您的jar包 7.按OK
应该看起来像这样:

enter image description here

现在你应该能够使用刚刚添加的依赖项了。
在 IntelliJ IDEA 2017.3.4 中测试通过。

2

build.gradle

runtimeOnly 'mysql:mysql-connector-java'

application.yml

spring: 
    application:
        name: apevent
        version: 1.0
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/applicaiton

它显示某些命令已被弃用,因此Gradle 8.0无法正常运行。因此,此答案仅适用于Gradle 8.0之前的版本。 - stoneshishang
应该使用 implementation 而不是 runtimeOnly - OneCricketeer

1

也许仍有人需要答案(就像我以前一样),我通过添加以下依赖项来解决了这个问题。

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
</dependency>

1

我现在遇到了同样的问题,在提供所需的依赖项后解决了它。

 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>

0

我的问题通过刷新项目解决了,可能是在运行应用程序时依赖项没有加载。


您的回答可以通过添加更多支持信息来改善。请[编辑]以添加进一步的细节,例如引用或文档,以便他人可以确认您的答案是否正确。您可以在帮助中心找到有关编写优秀答案的更多信息。 - Community
这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - Japhei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接