我在Spring应用程序中使用了application.properties
个文件。但最近我遇到了application.yaml
个文件。使用个人的所有三个和优势(如果有的话)中的优先顺序是什么。
我知道这可能是个愚蠢的问题。但我对他们的用法感到困惑。
答案 0 :(得分:11)
Spring属性解析属性顺序描述为here。
预计不会使用application.properties
和 application.yaml
。使用一种格式或另一种格式但不能同时使用。您使用的任何一个将在属性优先顺序中的位置12或13(取决于文件是否打包在应用程序JAR中)处理。
在此处包含上述链接的摘录以避免链接腐烂...
Spring Boot使用一个非常特殊的PropertySource命令,旨在允许合理地覆盖值。按以下顺序考虑属性:
- 您的主目录上的Devtools全局设置属性(当devtools处于活动状态时,〜/ .spring-boot-devtools.properties)。
- @TestPropertySource测试注释。
- 测试时的@ SpringBootTest#properties annotation属性。
- 命令行参数。
- 来自SPRING_APPLICATION_JSON的属性(嵌入在环境变量或系统属性中的内联JSON)
- ServletConfig init参数。
- ServletContext init参数。
- 来自java:comp / env。
的JNDI属性- Java系统属性(System.getProperties())。
- 操作系统环境变量。
- 一个只有随机属性的RandomValuePropertySource。*。
- 打包jar之外的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)
- 打包在jar中的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)
- 打包jar之外的应用程序属性(application.properties和YAML变体)。
- 打包在jar中的应用程序属性(application.properties和YAML变体)。
- @Configuration类上的@PropertySource注释。
- 默认属性(使用SpringApplication.setDefaultProperties指定)。
醇>
答案 1 :(得分:3)
简单来说,
如果你同时拥有yaml和属性文件以及两者中的相同密钥,那么spring boot将首先在属性中查找,如果没有找到,则会转到yaml。