Java 无法自动配置数据源:'spring.datasource.url'

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/50079841/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-10 23:25:06  来源:igfitidea点击:

Failed to auto-configure a DataSource: 'spring.datasource.url'

javaspringhibernatespring-bootjavafx

提问by AjFmO

I'm really new into Spring, specifically Spring Boot. Please I beg you, be the most explicit possible, give me docs to read so I can understand very well what I have to do.

我对 Spring 真的很陌生,特别是 Spring Boot。请我求求你,尽可能明确,给我文档阅读,这样我就可以很好地理解我必须做什么。

My project is using MySQL+JavaFX+Spring Boot+Spring Data JPA+Hibernate frameworks/technologies.

我的项目使用 MySQL+JavaFX+Spring Boot+Spring Data JPA+Hibernate 框架/技术。

This is my POM file.

这是我的 POM 文件。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nubeclick</groupId>
<artifactId>pos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>POSNubeClick</name>
<description>Sistema de punto de venta (Point Of Sale).</description>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <slf4j.version>1.7.12</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
    <dependency>
        <groupId>com.miglayout</groupId>
        <artifactId>miglayout-javafx</artifactId>
        <version>5.0</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>
    <!-- <dependency> -->
    <!-- <groupId>org.slf4j</groupId> -->
    <!-- <artifactId>slf4j-api</artifactId> -->
    <!-- <version>${slf4j.version}</version> -->
    <!-- </dependency> -->
    <!-- <dependency> -->
    <!-- <groupId>org.slf4j</groupId> -->
    <!-- <artifactId>jcl-over-slf4j</artifactId> -->
    <!-- <version>${slf4j.version}</version> -->
    <!-- </dependency> -->
    <!-- <dependency> -->
    <!-- <groupId>org.slf4j</groupId> -->
    <!-- <artifactId>slf4j-log4j12</artifactId> -->
    <!-- <version>${slf4j.version}</version> -->
    <!-- </dependency> -->
    <!-- <dependency> -->
    <!-- <groupId>log4j</groupId> -->
    <!-- <artifactId>log4j</artifactId> -->
    <!-- <version>${log4j.version}</version> -->
    <!-- </dependency> -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.jfoenix</groupId>
        <artifactId>jfoenix</artifactId>
        <version>1.10.0</version>
    </dependency>
    <dependency>
        <groupId>de.jensd</groupId>
        <artifactId>fontawesomefx</artifactId>
        <version>8.9</version>
    </dependency>
    <dependency>
        <groupId>org.controlsfx</groupId>
        <artifactId>controlsfx</artifactId>
        <version>8.40.13</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

This is my .properties configuration.

这是我的 .properties 配置。

spring.main.banner-mode=off

# Datasource connection properties
spring.datasource.url=jdbc:mysql://localhost/posnubeclick
spring.datasource.username=nubeclick
spring.datasource.password=nubeclick
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# JPA Properties
spring.jpa.database=posnubeclick

# Hibernate Configuration Properties
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.properties.hibernate.current_session_context_class=thread
spring.jpa.properties.hibernate.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

# Naming strategy
spring.jpa.hibernate.naming-strategy =org.hibernate.cfg.ImprovedNamingStrategy

#Turn Statistics on
spring.jpa.properties.hibernate.generate_statistics=true

# logging
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
logging.level.org.hibernate.stat=debug
logging.level.org.hibernate.type=trace
logging.level.org.hibernate.SQL=debug
#logging.level.org.hibernate.type.descriptor.sql=trace
logging.level.=error

This is my main class

这是我的主课

@SpringBootApplication(scanBasePackages = { "com.nubeclick.pos" })
public class MainApp extends Application {

private static final Logger log = LoggerFactory.getLogger(MainApp.class);

public static void main(String[] args) throws Exception {

    SpringApplication.run(MainApp.class, args);
    // launch(args);
}

@Override
public void start(Stage stage) throws Exception {
    try {
        log.info("Starting Hello JavaFX and Maven demonstration application");

        String fxmlFile = "/fxml/Main.fxml";
        log.debug("Loading FXML for main view from: {}", fxmlFile);
        FXMLLoader loader = new FXMLLoader();
    Parent rootNode = (Parent) loader.load(getClass().getResourceAsStream(fxmlFile));

        log.debug("Showing JFX scene");
        Scene scene = new Scene(rootNode);
        scene.getStylesheets().add("/styles/styles.css");
        stage.setTitle("NubeClick - Point of Sales");
        stage.setScene(scene);
        stage.show();
    } catch (Exception e) {
    // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

This is the stacktrace:

这是堆栈跟踪:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class

上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration' 的 bean 时出错:通过构造函数参数 0 表示不满足的依赖;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class] 中定义名称为“dataSource”的 bean 创建错误:通过工厂方法的 Bean 实例化失败; 嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [com.zaxxer.hikari.HikariDataSource]:工厂方法“dataSource”抛出异常;嵌套异常是 org.springframework.boot。

The Spring message is this:

春天的消息是这样的:

Description:

Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto-configured.

Reason: Failed to determine a suitable driver class

Action:

Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

描述:

无法自动配置数据源:未指定“spring.datasource.url”并且无法自动配置嵌入的数据源。

原因:未能确定合适的驱动程序类

行动:

请考虑以下事项: 如果您想要一个嵌入式数据库(H2、HSQL 或 Derby),请将其放在类路径中。

如果您有要从特定配置文件加载的数据库设置,您可能需要激活它(当前没有配置文件处于活动状态)。

I have refered to this other postand this other one

我已经参考了另一篇文章另一篇文章

I don't know what else to do, maybe start all over again from zero but I want to adapt those frameworks to my current project.

我不知道还能做什么,也许从零重新开始,但我想使这些框架适应我当前的项目。

What can I do to solve this?

我能做些什么来解决这个问题?

Edit

编辑



Crazy thing, I decided to upload the project to another repository, did a whole clean to the project folder (deleted .project, .settings, .classpath, bin, target) and reimported project into eclipse, did configure -> add maven nature, and now the error is gone, at least this error, got some other errors but now it loads everything from the properties file, so, Why did this happened?

疯狂的事情,我决定将项目上传到另一个存储库,对项目文件夹(删除.project,.settings,.classpath,bin,target)做了一个整体清理并将项目重新导入到eclipse中,确实配置->添加maven性质,现在错误消失了,至少这个错误,还有一些其他错误,但现在它从属性文件中加载了所有内容,所以,为什么会发生这种情况?

采纳答案by AjFmO

I decided to upload the project to another repository, did a whole clean to the project folder (deleted .project, .settings, .classpath, bin, target) and reimported project into eclipse, did configure -> add maven nature, and now the error is gone, at least this error, got some other errors but now it loads everything from the properties file, so, Why did this happened?

我决定将项目上传到另一个存储库,对项目文件夹进行了彻底清理(删除了 .project、.settings、.classpath、bin、target)并将项目重新导入到 eclipse 中,确实配置了 -> 添加了 maven 性质,现在错误消失了,至少这个错误,还有一些其他错误,但现在它从属性文件中加载了所有内容,所以,为什么会发生这种情况?

回答by DaShaun

This is what I would do if we were sitting next to each other, comment out a couple lines:

如果我们坐在一起,我会这样做,注释掉几行:

# Datasource connection properties
spring.datasource.url=jdbc:mysql://localhost/posnubeclick
spring.datasource.username=nubeclick
spring.datasource.password=nubeclick
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# JPA Properties
#spring.jpa.database=posnubeclick

Also is your .properties file called application.properties OR bootstrap.properties?

您的 .properties 文件是否也称为 application.properties 或 bootstrap.properties?

回答by mkuligowski

Make sure that you have mysql dependency in your pom.xml or build.gradle file:

确保您的 pom.xml 或 build.gradle 文件中有 mysql 依赖项:

compile 'mysql:mysql-connector-java'

or

或者

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

Then you can comment out your driver-class-nameproperty, because spring boot will autoconfigure it for you.

然后你可以注释掉你的driver-class-name属性,因为 spring boot 会为你自动配置它。

One more thing: It seems that you should connect to concrete port to mysql (by default it is 3306), so make sure that it looks similar to this:

还有一件事:似乎您应该连接到mysql的具体端口(默认情况下它是3306),因此请确保它看起来类似于:

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

回答by Riccardo Righi

Maybe Spring Boot is not locating your application.propertiesfile at all. Ensure you have this file in the root of the resourcesfolder (in a typical Maven project configuration, it should by located in the src/main/resourcesfolder root).

也许 Spring Boot 根本没有找到您的application.properties文件。确保您在资源文件夹的根目录中有此文件(在典型的 Maven 项目配置中,它应该位于src/main/resources文件夹根目录中)。

I suggest you to enable the DEBUG logging level to check if Spring Boot is reading the correct application.propertiesfile.

我建议您启用 DEBUG 日志记录级别以检查 Spring Boot 是否正在读取正确的application.properties文件。