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

MAC*_*MAC 11 yaml command-line-arguments spring-boot intellij-idea-2016 application.properties

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

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

gly*_*ing 19

此处描述 Spring属性解析属性顺序.

使用application.properties application.yaml不期望.使用一种格式或另一种格式但不能同时使用.您使用的任何一个将在属性优先顺序中的位置12或13(取决于文件是否打包在应用程序JAR中)处理.

包括上面链接的摘录,以避免链接腐烂...

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

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

  • 谢谢@Glitch,你确实说得很清楚。这真的很有帮助。你解释的比我想象的要多。 (2认同)

spa*_*y15 8

简单来说,

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

  • 虽然接受的答案是正确的,但实际上缺少这个事实 (2认同)
  • 是的,我们正在使用两者(yml 在 Git 中,我们使用 git-ignored 属性来存储我们的个人数据库凭据),并且它似乎像您所描述的那样工作。 (2认同)