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

时间:2017-08-22 16:00:14

标签: spring-boot yaml command-line-arguments intellij-idea-2016 application.properties

我在Spring应用程序中使用了application.properties个文件。但最近我遇到了application.yaml个文件。使用个人的所有三个和优势(如果有的话)中的优先顺序是什么。

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

2 个答案:

答案 0 :(得分:11)

Spring属性解析属性顺序描述为here

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

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

  

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

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

答案 1 :(得分:3)

简单来说,

如果你同时拥有yaml和属性文件以及两者中的相同密钥,那么spring boot将首先在属性中查找,如果没有找到,则会转到yaml。