我一直在我的Spring应用程序中使用application.properties
文件。但最近我遇到了application.yaml
文件。这三者之间的优先顺序是什么,以及使用个人的优势(如果有的话(。
我知道这可能是一个愚蠢的问题。 但我对它们的用法感到困惑。
Spring Boot 属性解析属性顺序如下所述。
不应使用application.properties
和application.yaml
。使用一种格式或另一种格式,但不能同时使用这两种格式。无论使用哪一个,都将按属性优先级顺序在位置 12 或 13 处处理(取决于文件是否打包在应用程序 JAR 中(。
在此处包含上述链接的摘录,以避免链接腐烂...
Spring Boot 使用非常特殊的 PropertySource 顺序,该顺序旨在允许对值进行合理的覆盖。属性按以下顺序考虑:
- 主目录上的 Devtools 全局设置属性(当 devtools 处于活动状态时,~/.spring-boot-devtools.properties(。
- 在测试上@TestPropertySource注释。
- 测试上的@SpringBootTest#属性注释属性。
- 命令行参数。
- 来自SPRING_APPLICATION_JSON的属性(嵌入在环境变量或系统属性中的内联 JSON(
- ServletConfig init parameters.
- ServletContext 初始化参数。
- 来自java:comp/env的JNDI属性。
- Java System 属性 (System.getProperties(((。
- 操作系统环境变量。
- 一个 RandomValuePropertySource,它只具有 random 中的属性。
- 打包的 jar 之外特定于配置文件的应用程序属性(应用程序-{配置文件}.属性和 YAML 变体(
- 打包在 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体(
- 打包的 jar 之外的应用程序属性(application.properties 和 YAML 变体(。
- 打包在 jar 中的应用程序属性(application.properties 和 YAML 变体(。
- @PropertySource@Configuration类的注释。
- 默认属性(使用 SpringApplication.setDefaultProperties 指定(。
简单来说,
如果你有 yaml 和属性文件,并且两者都有相同的键,那么 Spring boot 将首先在属性中查找,如果未找到,则将转到 yaml。
我来这里专门搜索配置文件的优先级。为了补充@glytching的答案,优先级只是:
- 默认然后特定于配置文件,同时
- 里面然后外面。
作为参考,以下是当前文档中专门关注文件优先级的引用:
配置数据文件按以下顺序考虑:
- 打包在 jar 中的应用程序属性 (应用程序属性和 YAML 变体(。
- 打包在 jar 中的特定于配置文件的应用程序属性(应用程序-{配置文件}.属性和 YAML 变体(。
- 打包的 jar 之外的应用程序属性(application.properties 和 YAML 变体(。
- 打包的 jar 之外的特定于配置文件的应用程序属性(应用程序-{配置文件}.属性和 YAML 变体(。