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

     2023-02-26     110

关键词:

【中文标题】SpringBoot 中属性文件、YAML 文件和命令行参数之间的优先顺序【英文标题】:Precedence order among properties file, YAML file, and Command Line arguments in SpringBoot 【发布时间】:2018-01-31 00:24:30 【问题描述】:

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

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

【问题讨论】:

希望您现在清楚我的回答。简单来说,如果你有 yaml 和 properties 文件,并且两者都有相同的 key,那么 spring boot 将首先在 properties 中查找,如果没有找到,则会转到 yaml。 【参考方案1】:

简单来说,

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

【讨论】:

虽然接受的答案是正确的,但实际上缺少这个事实 感谢@Tarnschaf 真的不确定原因.. 我觉得属性文件优先。 是的,我们都在使用(yml 在 Git 中,我们使用 git-ignored 属性来存储我们的个人数据库凭据),它似乎像你描述的那样工作。 如果我有两个包含同名属性的同名属性文件(例如abc.properties)会怎样? 我们不能在同一位置有 2 个同名的道具文件@AnthonyKong【参考方案2】:

Spring Boot 属性解析属性顺序描述here。

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

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

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

    您的主目录上的 Devtools 全局设置属性(当 devtools 处于活动状态时为 ~/.spring-boot-devtools.properties)。 您的测试中的@TestPropertySource 注释。 @SpringBootTest#properties 注释属性添加到您的测试中。 命令行参数。 来自 SPRING_APPLICATION_JSON 的属性(嵌入在环境变量或系统属性中的内联 JSON) ServletConfig 初始化参数。 ServletContext 初始化参数。 来自 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 指定)。

【讨论】:

谢谢@Glitch,你说得这么清楚。这真的很有帮助。您的解释超出了我的预期。 @MAC 很高兴它有帮助 Spring Boot 文档提到了 2021 年的优先顺序:“建议在整个应用程序中坚持使用一种格式。如果您在同一位置有 .properties 和 .yml 格式的配置文件, .properties 优先。”如上所述,命令行提供的属性优先于两者。

springboot的配置文件有哪几种格式?

SpringBoot中的配置文件主要有三种格式,properties、yaml、和xml方式。-其中properties格式配置文件后缀是.properties,配置项为:server.port=9090-yaml格式配置文件后缀是.yml,配置项是:server.port:9090在SpringBoot中,使用最广泛的配置文件是ya... 查看详情

springboot:properties和yaml配置文件

一、配置文件的生效顺序,会对值进行覆盖1.@TestPropertySource注解2.命令行参数3.Java系统属性(System.getProperties())4.操作系统环境变量5.只有在random.*里包含的属性会产生一个RandomValuePropertySource6.在打包的jar外的应用程序配置文件(... 查看详情

springboot对于yaml的详细学习和三种属性赋值的实战详解(代码片段)

一.yaml详细讲解1.1什么是yaml?YAML是一种数据序列化语言,通常用于编写配置文件。业界对YAML有不同的看法。有些人会说YAML代表另一种标记语言。其他人认为“YAML不是标记语言”(“YAML并非标记语言”)。“YAML”只是这句话的... 查看详情

Spring Boot 使用 Yaml 而不是属性文件

】SpringBoot使用Yaml而不是属性文件【英文标题】:SpringBootusingYamlinsteadofpropertiesfile【发布时间】:2017-01-2107:08:06【问题描述】:我使用SpringBoot。我想使用YAML而不是属性来编写我的配置。由于我使用spring-boot-starter,SnakeYAML库已经... 查看详情

springboot属性加载顺序

SpringBoot属性加载顺序SpringBoot为了能够更合理的重写各属性的值,使用了下面这种较为特别的属性加载顺序命令行中传入的参数。SPRING_APPLICATION_JSON中的属性。SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中的内容。java:c... 查看详情

面试官:啥是yaml?和springboot有啥关系?

...结构、各种配置文件等。YAML的配置文件后缀为.yml,例如Springboot项目中使用到的配置文件application.yml。标量标量是最基础的数据类型,不可再分的值,他们一般用于表示单个的变量,有以下七种:这样,我们就可以在程序中引入... 查看详情

如何使用 spring boot + .yaml 创建配置文件?

】如何使用springboot+.yaml创建配置文件?【英文标题】:HowcanIcreateprofileswithspringboot+.yaml?【发布时间】:2019-03-0816:23:45【问题描述】:我有带有2个属性文件的SpringBoot服务器:application-local.properties和application-test.properties在每个文... 查看详情

如何使用 spring boot + .yaml 创建配置文件?

】如何使用springboot+.yaml创建配置文件?【英文标题】:HowcanIcreateprofileswithspringboot+.yaml?【发布时间】:2019-03-0816:23:45【问题描述】:我有带有2个属性文件的SpringBoot服务器:application-local.properties和application-test.properties在每个文... 查看详情

springboot配置文件注解

参考技术Aspringboot使用一个全局配置文件,配置文件的名字是固定的:application.properties或application.yml@ConfigurationProperties:将全局配置文件的属性值,映射到SpringBoot组件上@Value:从全局配置文件中读取属性,映射到组件上@PropertySour... 查看详情

Spring Boot 从 YAML(属性)文件中读取数组

】SpringBoot从YAML(属性)文件中读取数组【英文标题】:SpringbootreadarrayfromYAML(properties)file【发布时间】:2018-10-2723:45:31【问题描述】:这是我的项目结构-src-main-java-mypackage-resources-configapplication.yml我在application.yml中有这个document:t... 查看详情

springboot解析指定yaml配置文件(代码片段)

...应给前端,这里简单记录一下实现过程。我们通常在SpringBoot项目中用配置文件属性时使用@ConfigurationProperties或@Value默认配置文件的属性值,也就是application.yml或者application.properties文件中的属性值。但是不能全都往... 查看详情

springboot项目中propertysource读取yaml配置文件(代码片段)

  springboot项目中,当我们使用@Value注解读取配置属性,默认的配置文件是properties类型文件,如果一些配置来自yaml格式配置文件,那么就需要做一个配置。PropertySource注解提供了factory属性,可以设置yaml格... 查看详情

springboot—配置文件详解:properties和yaml(代码片段)

一、配置文件优先级加载机制  SpringBoot项目启动会扫描以下位置的application.properties或者application.yml作为默认的配置文件    1、工程根目录:./config/    2、工程根目录:./    3、classpath:/config/    4、classpat... 查看详情

3springboot:springboot配置文件(配置文件yaml属性文件值注入<@value@configurationproperties@propertysource,@imp(代码片

1.配置文件:springboot默认使用一个全局配置文件配置文件名是固定的  配置文件有两种(开头均是application,主要是文件的后缀):->application.properties->application.yml 作用:修改springboot自动配置的默认值   ... 查看详情

springboot2配置文件application.yaml(代码片段)

源码基于SpringBoot2.4.41、认识配置文件1.1配置文件的加载创建SpringBoot项目的时候,会自动创建一个application.properties文件,该文件是SpringBoot默认的配置文件。SpringBoot在启动的时候会默认去寻找并加载application.properties文件和applicati... 查看详情

springboot学习总结外部配置(代码片段)

Springboot允许使用properties文件、yaml文件或者命令行参数作为外部配置(一)常规属性配置(基于properties、yaml文件)请求http://localhost:8090/yml-value-test,返回结果如下:(二)命令行参数配置当Springboot是基于jar包运行时,可以使用... 查看详情

springboot如何读取配置文件中的属性

Springboot自定义属性注入SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。SpringBoot默认会从resources目录下加载a... 查看详情

springboot配置文件读取和yaml结构(代码片段)

Springboot配置文件和ymal结构文章目录Springboot配置文件和ymal结构源码上一节yaml语法ymal中的数据结构Sprinsgboot配置文件根据profiles读取不同的配置文件获取配置信息通过注解获取配置文件信息下一节源码源码链接地址:上一节Spr... 查看详情