springboot-配置文件优先级

官方文档 https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config

Spring Boot允许外部化配置,这样就可以在不同的环境中使用相同的应用程序代码。您可以使用各种外部配置源,包括Java属性文件、YAML文件、环境变量和命令行参数

属性值可以使用@Value注解直接注入到bean中,通过Spring的环境抽象访问,也可以通过@ConfigurationProperties绑定到结构化对象。

外部配置优先级

Spring Boot使用了一个非常特殊的PropertySource顺序,旨在允许合理的值覆盖。后面的属性源可以覆盖前面定义的值。来源按以下顺序考虑(优先级从小到大):

  1. Default properties (specified by setting SpringApplication.setDefaultProperties).
  2. @PropertySource annotations on your @Configuration classes.
    • 请注意,在刷新应用程序上下文之前,此类属性源不会添加到环境中。
    • 这对于logging.* spring.main.*在刷新开始之前就要set的配置来说:太晚了
  3. Config data (such as application.properties files).
  4. A RandomValuePropertySource that has properties only in random.*.
  5. OS environment variables.
  6. Java System properties (System.getProperties()). ; VM options,使用java -Dage=18
  7. JNDI attributes from java:comp/env.
  8. ServletContext init parameters.
  9. ServletConfig init parameters.
  10. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property).
  11. Command line arguments.
  12. properties attribute on your tests. Available on @SpringBootTest and the test annotations for testing a particular slice of your application.
  13. @DynamicPropertySource annotations in your tests.
  14. @TestPropertySource annotations on your tests.
  15. Devtools global settings properties in the $HOME/.config/spring-boot directory when devtools is active.

在这里插入图片描述
最终转换的执行命令: java -Dage=22 -classpath **.jar cn.jhs.spring.boot.App --name=joe
执行结果name=joe,age=22,sex=M

Application Properties优先级

https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config.files

springboot默认会加载application.yaml或application.properties中的配置信息.
!!!注意: 同名文件,".properties"优先级大于".yaml"

1.application.properties and YAML

1.1 优先级

在这里插入图片描述

案例说明:
在这里插入图片描述

1.2 spring.config.name

如果你不喜欢用application作为配置文件名,可以通过指定spring.config.name环境属性来切换到另一个文件名。

# myproject.properties/yaml
java -jar myproject.jar --spring.config.name=myproject
1.3spring.config.location

还可以使用spring.config.location环境属性来引用显式位置。此属性接受一个逗号分隔的列表,其中包含要检查的一个或多个位置。

# 若default.properties与override.properties存在同名的配置,后面的会覆盖前面的; **last-wins**策略
$ java -jar myproject.jar --spring.config.location=\optional:classpath:/default.properties,\optional:classpath:/override.properties
1.4 spring.config.additional-location
#1. 设置 spring.config.additional-location
spring.config.additional-location=optional:classpath:/custom-config/,optional:file:./custom-config/#2.优先级(优先级从小到大,后面覆盖前面)
## additional-location高于spring.config.location优先级
optional:classpath:/;optional:classpath:/config/
optional:file:./;optional:file:./config/;optional:file:./config/*/
optional:classpath:custom-config/
optional:file:./custom-config/

2.application-{profile}.properties and YAML

https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config.files.profile-specific

Spring Boot还会尝试使用命名约定application-{profile}来加载特定于profile的文件。例如,如果您的应用程序激活一个名为prod的配置文件,那么application.yaml 和 application-prod.yaml 都会被使用。

特定于profile的文件总是覆盖非特定的配置。
如果指定了多个profile,则采用last-wins策略。例如,如果spring.profiles.active设置为prod,live由属性指定,值在application-prod.properties属性可以被application-live.properties中的属性覆盖。

2.1 last-win 综合案例
#1. profiles : prod,live#2. 存在配置文件
/cfgapplication-live.properties
/extapplication-live.propertiesapplication-prod.properties# 3.1 若 spring.config.location=classpath:/cfg/,classpath:/ext/ ,优先级(后面的覆盖前面)
# /cfg 总是会被 /ext 覆盖
/cfg/application-live.properties
/ext/application-prod.properties
/ext/application-live.properties# 3.2 若 spring.config.location=classpath:/cfg/;classpath:/ext/    (注意是; 不是,)
# # /cfg 和/ext 优先级一致
/ext/application-prod.properties
/cfg/application-live.properties
/ext/application-live.properties

3. jar包外的 application.properties and YAML

4 jar包外的application-{profile}.properties and YAML



其它

yaml分隔符

yaml可以使用---分割不同的配置块,当spring.profiles.active=dev时,配置文件优先级:
在这里插入图片描述
此时的environment.getPropertySources().propertySourceList
在这里插入图片描述

@PropertySource(value={xx,yy}) 多个配置

@Component
@ConfigurationProperties(prefix = "my.cache")
//注意:默认仅支持 *.properties
@PropertySource(value = {"classpath:cache.properties","file:./config/cache.properties"}, ignoreResourceNotFound = true)
public class CacheConfigProperties {private String name;private long timeout;
}

这里@PropertySource引入的资源,跟code顺序无关, 同样按照 file > classpath的优先级来加载。

所以我们可以在project中填写默认的配置。
部署服务器时,在file目录下,填写实际的配置。

宽松的绑定规则

https://docs.spring.io/spring-boot/docs/2.7.16/reference/htmlsingle/#features.external-config.typesafe-configuration-properties.relaxed-binding

Spring Boot使用了一些宽松的规则将环境属性绑定到@ConfigurationProperties bean上,因此环境属性名和bean属性名不需要完全匹配

@ConfigurationProperties class:
import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "my.main-project.person")
public class MyPersonProperties {private String firstName;public String getFirstName() {return this.firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}}

在上述代码中,可以使用下列属性名。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/99950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS 工作空间及功能包

ROS工作空间(workspace)是一个存放工程开发相关文件的文件夹。 1. 什么是ROS的工作空间 使用ROS实现机器人开发的主要手段是写代码,这些代码文件存放的空间就是工作空间。 工作空间(workspace)是一个用于存放工程开发…

Spring Data Redis使用方式

1.导入Spring Data Redis的maven坐标 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2. 配置Redis数据源 2.1application.yml文件…

【工具】SSH端口转发管理器,专门管理SSH Port Forwarding

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 开源代码看这里&#xff1a;http://xfxuezhang.cn/index.php/archives/1151/ 背景介绍 有时候需要用到ssh的端口转发功能。目前来说&#xff0c;要么是cmd里手敲指令&#xff0c;但每次敲也太麻烦了&#xff1b;或…

JVM命令行监控工具

JVM命令行监控工具 概述 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&#xff0c;在用户体验至上的今天&#xff0c;解决好应用的性能问题能带来非常大的收益。 Java作为最流行的编程语言之一&#xff0c;其应用性能诊断一直受到业界广泛关注&#xff0c;可能…

游戏缺少dll文件用什么修复?教你多种dll文件修复方法搞定!

在玩游戏的时候&#xff0c;有时候会遇到一些dll文件缺失的问题&#xff0c;导致游戏无法正常运行。这对于广大游戏爱好者来说无疑是一种巨大的打击。但是不要担心&#xff0c;我们总会有方法来解决这个问题。本文将详细介绍几种解决方法&#xff0c;帮助你轻松修复游戏缺少dll…

技术干货:解密最受欢迎的开源 Serverless 框架弹性技术实现

作者&#xff1a;元毅 Knative 是一款基于 Kubernetes 的开源 Serverless 应用编排框架&#xff0c;其目标是制定云原生、跨平台的 Serverless 应用编排标准。Knative 主要功能包括基于请求的自动弹性、缩容到 0、多版本管理、基于流量的灰度发布以及事件驱动等。 弹性是 Ser…

苹果遭遇安全危机,应用商店曝出不良APP,或影响iPhone的销售

据澎湃新闻报道指苹果的App Store被曝出不良APP位居下载榜前列&#xff0c;这对于向来强调APP严格审核的苹果来说是巨大的打击&#xff0c;更影响向来被认为信息安全遥遥领先的名声&#xff0c;对当下正热销的iPhone15或造成打击。 据了解被曝的软件以“学习XX字母”为命名&…

C++ 获取文件创建时间、修改时间、大小等属性

简介 获取文件创建时间、修改时间、大小等属性 代码 #include <iostream> #include <string.h> #include <time.h>void main() {std::string filename "E:\\LiHai123.txt";struct _stat stat_buffer;int result _stat(filename.c_str(), &s…

直线导轨精度等级在设备中有什么影响?

直线导轨的精度选择是直线导轨应用中的重要环节&#xff0c;需要根据具体的应用场景和设备要求来选择合适的精度等级&#xff08;常见分3个等级&#xff1a;N/H/P&#xff09;。下面我们来详细了解一下直线导轨的精度选择。 1、精度等级的概念&#xff1a;直线导轨的精度等级是…

AIGC | LLM 提示工程 -- 如何向ChatGPT提问

当前生成式人工智能已经成为革命性的驱动源&#xff0c;正在迅速地重塑世界&#xff0c;将会改变我们生活方式和思考模式。LLM像一个学会了全部人类知识的通才&#xff0c;但这不意味每个人可以轻松驾驭这个通才。我们只有通过学习面向LLM的提示工程&#xff0c;才可以更好的让…

LLM 时代,如何优雅地训练大模型?

原作者王嘉宁 基于https://wjn1996.blog.csdn.net/article/details/130764843 整理 大家好&#xff0c;ChatGPT于2022年12月初发布&#xff0c;震惊轰动了全世界&#xff0c;发布后的这段时间里&#xff0c;一系列国内外的大模型训练开源项目接踵而至&#xff0c;例如Alpaca、B…

JS-Dom转为图片,并放入pdf中进行下载

1、将dom转换为图片 这里我们使用html2canvas工具插件先将dom转为canvas元素然后canvas拥有一个方法可以将绘制出来的图形转为url然后下载即可注意&#xff1a;如果元素使用了渐变背景并透明的话&#xff0c;生成的图片可能会有点问题。我下面这个案例使用了渐变背景实现元素对…

性能测试-如何进行监控设计

监控设计步骤 首先&#xff0c;你要分析系统的架构。在知道架构中使用的组件之后&#xff0c;再针对每个组件进行监控。 其次&#xff0c;监控要有层次&#xff0c;要有步骤。先全局&#xff0c;后定向定量分析。 最后&#xff0c;通过分析全局、定向、分层的监控数据做分析…

刘京城:我的《软件方法》学习经历(有彩蛋)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 写在前面&#xff08;潘加宇&#xff09; 下面是刘京城写的关于他学习《软件方法》的经历。我在前面啰嗦几句。 我做软件建模方面的研究和普及工作已经24年了&#xff0c;和各行各业…

Springboot学习笔记——3

Springboot学习笔记——3 一、热部署1.1、手动启动热部署1.2、自动启动热部署1.3、热部署范围配置1.4、关闭热部署 二、配置高级2.1、第三方bean属性绑定2.2、松散绑定2.3、常用计量单位应用2.4、bean属性校验2.5、进制数据转换规则 三、测试3.1、加载测试专用属性3.2、加载测试…

TLR4-IN-C34-C2-COO,一种结合了TLR4抑制剂TLR4-IN-C34的连接器

TLR4-IN-C34-C2-COO是一种结合了TLR4抑制剂TLR4-IN-C34的连接器&#xff0c;在免疫调节中发挥重要作用&#xff0c;它通过抑制TLR4信号通路的传导&#xff0c;从而达到降低炎症反应的目的。TLR4是Toll样受体家族中的一员&#xff0c;它主要识别来自细菌和病毒的保守模式&#x…

红队专题-Cobalt strike4.5二次开发

红队专题 招募六边形战士队员IDEA 自动换行原版CS反编译破解jar包反编译拔掉暗桩初始环境效果 stageless beacon http通信协议 过程分析上线&心跳get请求teamserver 处理请求 参考链接 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 …

vue:权限绑定菜单(全局引入,在template内用v-if调用)

登录成功后&#xff0c;将返回的权限保存到缓存 sessionStorage&#xff1a;浏览页面期间保存&#xff0c;关闭浏览器后丢掉数据 在utils内index.js内定义isAuth方法 在main.js内引入&#xff0c;并挂载全局 在vue页面内&#xff0c;在template内用v-if调用

一个好用的k8s代理工具——KtConnect

介绍 KtConnect实现了开发者本地运行的服务与Kubernetes集群中的服务之间的双向互通。 核心功能 本地直接访问Kubernetes集群内网 通过KtConnect可以直接连接Kubernetes集群内部网络&#xff0c;在不修改代码的情况下完成本地联调测试 本地解析Kubernetes服务内网域名 直…

大华银行与微软合作:用365 Copilot提升工作效率

微软在官网宣布与新加坡最大银行之一大华银行&#xff08;United Overseas Bank&#xff0c;简称“UOB”&#xff09;达成技术合作。大华银行将于今年10月份开始&#xff0c;为300名员工提供Microsoft 365 Copilot服务&#xff0c;以实现降本增效。 Microsoft 365 Copilot是微…