无法自动配置数据源:'spring.datasource.url'
Posted
技术标签:
【中文标题】无法自动配置数据源:\'spring.datasource.url\'【英文标题】:Failed to auto-configure a DataSource: 'spring.datasource.url'无法自动配置数据源:'spring.datasource.url' 【发布时间】:2018-10-09 07:53:17 【问题描述】:我的项目正在使用 mysql、JavaFX、Spring Boot、Spring Data JP 和 Hibernate 框架/技术。
这是我的 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>
这是我的 .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=%dyyyy-MM-dd HH:mm:ss %-5level %logger36 - %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
这是我的主要课程
@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();
这是堆栈跟踪:
在上下文初始化期间遇到异常 - 取消刷新尝试: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.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: 无法确定合适的驱动类
Spring 消息是这样的:
说明: 无法自动配置数据源:未指定“spring.datasource.url”并且无法自动配置嵌入式数据源。 原因:无法确定合适的驱动程序类 行动: 考虑以下: 如果您想要一个嵌入式数据库(H2、HSQL 或 Derby),请将其放在类路径中。 如果您有要从特定配置文件加载的数据库设置,您可能需要激活它(当前没有激活的配置文件)。
我已经提到了这个other post和这个other one
我不知道还能做什么,也许从零重新开始,但我想使这些框架适应我当前的项目。
我能做些什么来解决这个问题?
疯狂的事情,我决定将项目上传到另一个存储库,对项目文件夹进行了彻底清理(删除了 .project、.settings、.classpath、bin、target)并将项目重新导入到 eclipse 中,进行了配置 -> 添加maven性质,现在错误消失了,至少这个错误,得到了一些其他错误但是现在它从属性文件中加载了所有内容,那么,为什么会发生这种情况?
文档的链接将不胜感激,这样我就可以理解我必须做什么。
【问题讨论】:
你的 pom.xml / build,gradle 文件中有 mysql 依赖吗? 【参考方案1】:如果我们坐在一起,我会这样做,注释掉几行:
# 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
您的 .properties 文件是否也称为 application.properties 或 bootstrap.properties?
【讨论】:
该文件名为 application.properties,尝试了 bootstrap.properties 并得到了相同的结果,甚至注释了该行。【参考方案2】:确保您的 pom.xml 或 build.gradle 文件中有 mysql 依赖项:
compile 'mysql:mysql-connector-java'
或
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
然后你可以注释掉你的driver-class-name
属性,因为spring boot会自动为你配置。
还有一件事:您似乎应该连接到mysql的具体端口(默认为3306),因此请确保它看起来类似于:
spring.datasource.url=jdbc:mysql://localhost:3306/posnubeclick
【讨论】:
我的 pom.xml 中确实有 MySQL 依赖项。我忘了发布我的pom文件。将编辑帖子以将其放在那里。【参考方案3】:也许 Spring Boot 根本没有找到您的 application.properties
文件。确保您在 resources 文件夹的根目录中有此文件(在典型的 Maven 项目配置中,它应该位于 src/main/resources
文件夹根目录中)。
我建议您启用 DEBUG 日志记录级别以检查 Spring Boot 是否正在读取正确的 application.properties
文件。
【讨论】:
【参考方案4】:我决定将项目上传到另一个存储库,对项目文件夹进行了全面清理(删除了 .project、.settings、.classpath、bin、target)并将项目重新导入 eclipse,进行了配置 -> 添加 maven 性质,现在错误消失了,至少这个错误,还有一些其他错误,但是现在它从属性文件中加载了所有内容,那么,为什么会发生这种情况?
【讨论】:
如果您移动资源或重命名它们,项目不一定会在没有清理的情况下看到它们。我看到此行为的示例包括日志记录配置文件和属性文件。也许您的 .properties 文件上的文件名更改是罪魁祸首。以上是关于无法自动配置数据源:'spring.datasource.url'的主要内容,如果未能解决你的问题,请参考以下文章
无法自动配置数据源:'spring.datasource.url'
Spring Boot 自动配置无法与 spring-data-jpa 一起正常工作