Spring Boot 无法读取 yml 属性文件

Posted

技术标签:

【中文标题】Spring Boot 无法读取 yml 属性文件【英文标题】:Spring Boot can't read yml properties file 【发布时间】:2020-02-14 08:57:02 【问题描述】:

我有一个适用于 Spring Boot 应用程序的属性文件,但是每当我将其转换为 Yaml 时,我都会收到错误消息,指出尚未指定数据库 url。

我正在使用以下依赖项:

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

属性文件的配置如下(工作正常):

spring.datasource.url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=username
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true

在 Yaml 中我有:

 spring:
        datasource:
            url: "jdbc:mysql://localhost:3306/db_name?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"
            driver-class-name: com.mysql.cj.jdbc.Driver
            username: "username"
            password: "password"
        jpa:
            hibernate:
                ddl-auto: update
            generate-ddl: true
            show-sql: true

我试过带引号和不带引号,我试过用driverClassName代替driver-class-name,但是每次在服务器尝试启动时都会收到以下消息:

***************************
APPLICATION FAILED TO START
***************************

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

Reason: Failed to determine a suitable driver class
...

【问题讨论】:

参数的间距也会有影响,尝试改变它们。它可能会有所帮助。正如@fathy 建议的那样,从价值中删除引号 【参考方案1】:

我认为您必须从

中删除 "
url: "jdbc:mysql://localhost:3306/db_name?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"

让它像下面一样

 url: jdbc:mysql://localhost:3306/db_name?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

关注link 可能会有所帮助

【讨论】:

我在这里发布问题之前研究了许多类似的问题并决定发布它,因为我完全被这个问题所困扰。是的,我可以保持原样,但是对于在单个文件中具有不同活动配置文件属性的选项,我想要 Yaml 版本。如文中所述,我在发布前尝试了带引号和不带引号。我想知道是否需要以某种方式再次定义 URL,或者我可能需要将 mySQL 显式声明为数据库源。一个月前我已经尝试过 yaml 转换并且遇到了完全相同的问题。 你确定你放了 *** hibernate.dialect : org.hibernate.dialect.MySQLDialect ***【参考方案2】:

您是否在 pom.xml 文件中声明了 MySql 驱动器?如果你这样做了,Spring Boot 应该会自动发现你正在使用 MySql 并找出驱动程序类。

【讨论】:

以上是关于Spring Boot 无法读取 yml 属性文件的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 读取配置文件(application.yml)中的属性值111

springboot 为啥读取不到 yml 属性

Spring Boot 从 YAML(属性)文件中读取数组

spring boot 读取 application.yml 中 List 类型数据

单体Spring boot引入外部配置文件yml,properties

spring boot 入门1-----如何使用@Value注解读取配置文件以及使用@ConfigrationProperties注解