用于 Spring Boot 的 application.yml 与 application.properties

Posted

技术标签:

【中文标题】用于 Spring Boot 的 application.yml 与 application.properties【英文标题】:application.yml vs application.properties for Spring Boot 【发布时间】:2018-05-07 20:37:33 【问题描述】:

在我的项目中,我目前使用application.yml 进行配置。 Spring Initializr 生成application.properties?各有什么优缺点?

【问题讨论】:

【参考方案1】:

嗯,它们只是不同的数据格式。哪个更好更容易阅读?这显然是主观的。 Here's 一篇有用的博文。

spring-boot 配置而言,请注意,使用YAML 只有一个记录在案的缺点。根据documentation:

YAML 文件不能通过@PropertySource 注解加载。因此,如果您需要以这种方式加载值,则需要使用属性文件。

【讨论】:

YAML 配置格式是否在整个 SpringBoot 世界中被广泛接受?当我们遇到只提供properties格式配置的3rd 方库时,自己转成yaml格式容易吗? @BruceSun 好像不太接受,因为官方文档很少用到,这个用.properties 比如:docs.spring.io/spring-boot/docs/current/reference/html/… 但是我公司的spring boot项目模板有yml... 它们不仅仅是不同的数据格式。 YAML 支持 utf-8,application.properties 不支持 关于这个话题的另一个问题:当一个库需要我为application.yml文件设置配置时,我是否可以假设我在application.properties文件中设置属性时可以加载它?确切地说,为两个文件加载属性的机制是否相同? 另外,当我的代码库同时提供application.yamlapplication.properties 时会发生什么?我可以将这些东西移到.yaml 一个到.properties(根据需要更改格式)并期望事情继续以同样的方式工作吗?【参考方案2】:

一个显着的区别是属性在每个文件中的表示方式。 YAML 文件可以使用一致的空格来表示层次结构,而属性文件可以使用 = 来表示属性值。

例如

列表在 YAML 中分层表示:

标题:

  - user-agent
  - x-wag-diagonalsize

列表可以在属性文件中表示为内联列表(用逗号分隔):

headers = 用户代理,x-wag-diagonalsize

另一个区别是我们可以将多个配置文件添加到单个 yaml 文件中。

例如,我们可以将 application.yaml(应用程序特定属性)和 bootstrap.yaml(服务器特定属性)添加到单个 config.yaml 文件中

【讨论】:

【参考方案3】:

据我所知,这些至少是一些的差异:

    .properties 以顺序格式存储数据,而.yml 以分层格式存储数据。

    .properties 仅支持键值对(基本上是字符串值),而.yml 支持键值对,以及映射、列表和标量类型值。

    .properties 专门用于 Java,而.yml 可以用于其他语言(例如 Java、Python、ROR 等)。

    当管理多个配置文件时:.properties 要求您为每个配置文件创建 .properties 文件,而在.yml 中,您可以在单个 @ 中为每个特定配置文件创建一个部分987654330@文件。

    在Spring项目中,@PropertySource注解只能和.properties一起使用。

【讨论】:

好答案,只是对 point#2 的评论 .properties file :可以支持键值对以及映射、列表和标量类型值。 + point#3 .properties file 可用于任何语言 所以我们可以有 application.yml 或 application.properties.. 一个就足够了还是两个文件都需要? 所以我们可以有 application.yml 或 application.properties.. 一个就足够了还是两个文件都需要?如果我们保留这两个文件,有什么影响,将拾取哪个文件 @Stunner 这完全取决于您的要求。但是,如果它们满足您的需要,您可以同时使用它们。例如,我在一个项目中工作,并且在 application.properties 中定义的数据库配置、缓存配置、邮件配置等常见属性中,对于特定于设备的配置,我们创建不同的 ymls。 所以你的意思是说,无论声明多少属性文件或yaml文件,甚至属性文件和yaml文件的组合,spring都不介意数量并加载所有文件两个?

以上是关于用于 Spring Boot 的 application.yml 与 application.properties的主要内容,如果未能解决你的问题,请参考以下文章

根据环境变量设置 Spring Boot application.properties

从 Shell 脚本优雅地关闭 Spring Boot 应用程序

使用 Spring Data JPA 在 Spring Boot 2 应用程序中发布数据

SpringBoot发送简单文本邮件

用于抑制 BatchDataInitializer 的 Spring-Boot 配置

定制的 ObjectMapper 不适用于 spring boot hatoas