Spring Boot JPA MySQL:无法确定适当的驱动程序类。

4

我正在使用Spring Boot JPA创建一个应用程序,我使用MySQL作为数据库。

以下是我的application.properties文件

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

我已添加以下依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

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

当我查看调试日志时,我可以看到mysql java连接器在我的类路径中,但我仍然遇到以下错误。
2019-07-29 10:03:00.742 INFO 10356 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/]: 初始化Spring嵌入式Web应用程序上下文 2019-07-29 10:03:00.742 INFO 10356 --- [main] o.s.web.context.ContextLoader: 根WebApplicationContext:初始化完成于1534毫秒 2019-07-29 10:03:00.789 WARN 10356 --- [main] ConfigServletWebServerApplicationContext: 在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException: 创建bean时出错(名称是'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration'):通过构造函数参数0表达的未满足的依赖关系; 嵌套异常为org.springframework.beans.factory.BeanCreationException:在类路径资源[org / springframework / boot / autoconfigure / jdbc / DataSourceConfiguration $ Hikari.class]中定义的名为'dataSource'的bean创建失败:通过工厂方法'instantiation com.zaxxer.hikari.HikariDataSource ]:'dataSource'抛出的异常; 嵌套异常为org.springframework.boot.autoconfigure.jdbc.DataSourceProperties $ DataSourceBeanCreationException:无法确定合适的驱动程序类2019-07-29 10:03:00.789 INFO 10356 --- [main] o.apache.catalina.core.StandardService:停止服务[Tomcat]2019-07-29 10:03:00.805 INFO 10356 --- [main] ConditionEvaluationReportLoggingListener:

启动应用程序时出错。要显示条件报告,请使用'debug'启用应用程序。2019-07-29 10:03:00.805 ERROR 10356 --- [main] o.s.b.d.LoggingFailureAnalysisReporter:

*************************** 应用程序无法启动


描述:

无法配置数据源:“未指定'url'属性,也不能配置嵌入式数据源。”

原因:无法确定合适的驱动程序类

操作:

请考虑以下内容:如果您想要嵌入式数据库(H2、HSQL或Derby),请将其放在类路径上。如果您需要从特定配置文件中加载数据库设置,则可能需要激活它(当前没有激活任何配置文件)。

8个回答

14

Spring Boot自动配置尝试根据添加到类路径的依赖项自动配置bean。由于您在类路径中具有JPA依赖关系,因此Spring Boot会尝试自动配置JPA数据源。问题是,您没有提供Spring执行自动配置所需的完整信息。

将此丢失的属性添加到您的application.properties文件中,以便spring可以自动配置。

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

通过使用实用程序构建器类DataSourceBuilder,您可以以编程方式定义数据源的另一种方法。为此,您需要提供数据库URL、用户名、密码和SQL驱动程序信息来创建您的数据源:

@Configuration
public class DatasourceConfig {
    @Bean
    public DataSource datasource() {
        return DataSourceBuilder.create()
                .driverClassName("com.mysql.cj.jdbc.Driver")
                .url("jdbc:mysql://localhost:3306/myDb")
                .username("root")
                .password("pass")
                .build();
    }
}

我也尝试过这个,但仍然继续出现相同的错误。我还漏掉了其他什么吗? - Anuj Mehta
尝试使用这个spring.datasource.driver-class-name=com.mysql.jdbc.Driver,然后告诉我。 - rimonmostafiz
尝试将其更改为“com.mysql.cj.jdbc.Driver”,以适用于MySQL连接器8.0及以上版本。 - kashish verma
@kashishverma 我尝试了你的建议,但不幸的是似乎没起作用。感谢你的帮助。让我删除该项目并创建一个新项目。 - Anuj Mehta
请说明所需的软件包... 确定应使用哪一个非常麻烦... (DataSource来自哪个软件包?) - Itération 122442

3

我曾经遇到过同样的问题,我通过右键点击项目,选择maven/update project,然后选择你的项目并接受即可解决。


1

你的应用程序组织看起来像:

Commons -> Module1

CommonsModule1 的父级。

我在我的 commons 模块中创建了一个带有 JPA 注释的 BaseEntity。commons 依赖项被指定为

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

一旦我添加了提供的

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <scope>provided</scope>
    </dependency>

这个问题已经被我解决了。不幸的是


1
我也遇到了这个问题。我的解决办法是:打开模块设置,选择资源,并右键单击它,然后选择“测试资源”。然后问题就解决了。

setting page


1

Spring Autoconfigure会查找2个属性以加载适当的驱动程序:

  1. spring.datasource.driverClassName(在这种情况下,值将从MySQL连接器4.4.1.3开始为'com.mysql.cj.jdbc.Driver')
  2. spring.datasource.url(在这种情况下它是jdbc:mysql://localhost:3306/mydb)

实际上,Spring Autoconfigure只需要spring.datasource.url就可以从中推导出驱动程序类名。


0
对我来说,每当我创建Spring Data JPA项目时就会遇到这个错误。在我的项目的.classpath文件中,我发现资源文件夹被排除了,所以我将其删除并解决了错误。

-1

更改:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb

to:

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/mydb

-7

我的配置中有一些错误,我无法检测到,所以我重新创建了同样的项目,然后事情开始正常工作了。


3
这种回答应该被接受吗? - Jin Kwon
2
你应该指出阻止了你的问题。 - Amine

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