用于 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.yaml
和application.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 应用程序中发布数据