SpringBoot 中属性文件、YAML 文件和命令行参数之间的优先顺序

问题描述 投票:0回答:3

我长期以来一直在我的 Spring 应用程序中使用

application.properties
文件。但最近我遇到了
application.yaml
文件。三者之间的优先顺序是什么以及使用个体的优势(如果有的话)。

我知道这可能是个愚蠢的问题。但我对它们的用法感到困惑。

spring-boot yaml command-line-arguments intellij-idea-2016 application.properties
3个回答
72
投票

Spring Boot 属性解析属性顺序描述于here

预计不会使用

application.properties
application.yaml
。使用一种格式或另一种格式,但不能同时使用两种格式。无论您使用哪一个,都将按照属性优先顺序在位置 12 或 13 进行处理(取决于文件是否打包在应用程序 JAR 中)。

在此处包含上述链接的摘录,以避免链接失效...

Spring Boot 使用非常特殊的 PropertySource 顺序,旨在允许合理地覆盖值。按以下顺序考虑属性:

  1. 默认属性(通过设置 SpringApplication.setDefaultProperties(Map) 指定)。
  2. @Configuration 类上的@PropertySource 注释。请注意,在刷新应用程序上下文之前,此类属性源不会添加到环境中。现在配置某些属性为时已晚,例如在刷新开始之前读取的logging.*和spring.main.*。
  3. 配置数据(例如application.properties文件)。
  4. 仅具有随机属性的 RandomValuePropertySource。*。
  5. 操作系统环境变量。
  6. Java 系统属性 (System.getProperties())。
  7. 来自 java:comp/env 的 JNDI 属性。
  8. ServletContext 初始化参数。
  9. ServletConfig 初始化参数。
  10. 来自 SPRING_APPLICATION_JSON 的属性(嵌入环境变量或系统属性中的内联 JSON)。
  11. 命令行参数。
  12. 测试中的
  13. properties
     属性。可在 @SpringBootTest 和测试注释上使用,用于测试应用程序的特定部分。
  14. 测试中的@DynamicPropertySource注释。
  15. @TestPropertySource 对您的测试进行注释。
  16. 当 devtools 处于活动状态时,$HOME/.config/spring-boot 目录中的 Devtools 全局设置属性。

配置数据文件按以下顺序考虑:

    打包在 jar 内的应用程序属性(application.properties 和 YAML 变体)。
  1. 打包在 jar 内的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
  2. 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。
  3. 打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。

25
投票

简单来说,

如果你有 yaml 和属性文件,并且两者都有相同的密钥,那么 Spring Boot 将首先在属性中查找,如果没有找到,则将转到 yaml。


1
投票
我来到这里专门寻找配置文件的优先级。为了补充@glytching的答案,优先级只是:

    默认然后配置文件特定,并且同时
  • 先内后外。
此处引用的是

当前文档,特别关注文件优先级:

配置数据文件按以下顺序考虑:

    应用程序属性打包在 jar 内 (application.properties 和 YAML 变体)。
  1. 打包在 jar 内的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
  2. 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。
  3. 打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.