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



我一直在我的Spring应用程序中使用application.properties文件。但最近我遇到了application.yaml文件。这三者之间的优先顺序是什么,以及使用个人的优势(如果有的话(。

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

Spring Boot 属性解析属性顺序如下所述。

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

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

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

  1. 主目录上的 Devtools 全局设置属性(当 devtools 处于活动状态时,~/.spring-boot-devtools.properties(。
  2. 在测试上@TestPropertySource注释。
  3. 测试上的@SpringBootTest#属性注释属性。
  4. 命令行参数。
  5. 来自SPRING_APPLICATION_JSON的属性(嵌入在环境变量或系统属性中的内联 JSON(
  6. ServletConfig init parameters.
  7. ServletContext 初始化参数。
  8. 来自java:comp/env的JNDI属性。
  9. Java System 属性 (System.getProperties(((。
  10. 操作系统环境变量。
  11. 一个 RandomValuePropertySource,它只具有 random 中的属性。
  12. 打包的 jar 之外特定于配置文件的应用程序属性(应用程序-{配置文件}.属性和 YAML 变体(
  13. 打包在 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体(
  14. 打包的 jar 之外的应用程序属性(application.properties 和 YAML 变体(。
  15. 打包在 jar 中的应用程序属性(application.properties 和 YAML 变体(。
  16. @PropertySource@Configuration类的注释。
  17. 默认属性(使用 SpringApplication.setDefaultProperties 指定(。

简单来说,

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

我来这里专门搜索配置文件的优先级。为了补充@glytching的答案,优先级只是:

  • 默认然后特定于配置文件,同时
  • 里面然后外面。

作为参考,以下是当前文档中专门关注文件优先级的引用:

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

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

最新更新