我长期以来一直在我的 Spring 应用程序中使用
application.properties
文件。但最近我遇到了application.yaml
文件。三者之间的优先顺序是什么以及使用个体的优势(如果有的话)。
我知道这可能是个愚蠢的问题。但我对它们的用法感到困惑。
Spring Boot 属性解析属性顺序描述于here。
预计不会使用
application.properties
和 application.yaml
。使用一种格式或另一种格式,但不能同时使用两种格式。无论您使用哪一个,都将按照属性优先顺序在位置 12 或 13 进行处理(取决于文件是否打包在应用程序 JAR 中)。
在此处包含上述链接的摘录,以避免链接失效...
Spring Boot 使用非常特殊的 PropertySource 顺序,旨在允许合理地覆盖值。按以下顺序考虑属性:
- 默认属性(通过设置 SpringApplication.setDefaultProperties(Map) 指定)。
@Configuration 类上的@PropertySource 注释。请注意,在刷新应用程序上下文之前,此类属性源不会添加到环境中。现在配置某些属性为时已晚,例如在刷新开始之前读取的logging.*和spring.main.*。- 配置数据(例如application.properties文件)。
- 仅具有随机属性的 RandomValuePropertySource。*。
- 操作系统环境变量。
- Java 系统属性 (System.getProperties())。
- 来自 java:comp/env 的 JNDI 属性。
- ServletContext 初始化参数。
- ServletConfig 初始化参数。
- 来自 SPRING_APPLICATION_JSON 的属性(嵌入环境变量或系统属性中的内联 JSON)。
- 命令行参数。
- 测试中的
- 测试中的@DynamicPropertySource注释。
properties
属性。可在 @SpringBootTest 和测试注释上使用,用于测试应用程序的特定部分。- @TestPropertySource 对您的测试进行注释。
- 当 devtools 处于活动状态时,$HOME/.config/spring-boot 目录中的 Devtools 全局设置属性。
配置数据文件按以下顺序考虑:
打包在 jar 内的应用程序属性(application.properties 和 YAML 变体)。
- 打包在 jar 内的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
- 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。
- 打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
简单来说,
如果你有 yaml 和属性文件,并且两者都有相同的密钥,那么 Spring Boot 将首先在属性中查找,如果没有找到,则将转到 yaml。
当前文档,特别关注文件优先级:
配置数据文件按以下顺序考虑:
应用程序属性打包在 jar 内 (application.properties 和 YAML 变体)。
- 打包在 jar 内的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
- 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。
- 打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。