Springboot配置方式和优先级

Springboot配置方式和优先级

  • 调试思路
  • key的获取过程
  • application.properties优先级
  • 总结

在阅读开源项目时看到一种不太常见的属性配置方式,在项目根路径定义配置文件。并且提到下面的顺序,验证并看一下源码实现。

# spring boot支持外部application.yml  读取优先级为:
#   1、file:./config/(当前目录下的config文件夹)
#   2、file:./(当前目录)
#   3、classpath:/config/(classpath下的config目录)
#   4、classpath:/(classpath根目录)

调试思路

先以默认方式定义属性并获取该属性,然后看一下获取配置的关键代码。最后依次在不同文件层级添加配置文件,通过属性是否被覆盖验证优先级。

  1. /resources/application.properties 配置文件:
spring.application.name=demo-springbootconfig
custom.name=/resources/application.properties #定义属性
  1. 测试类
@SpringBootApplication
public class DemoSpringbootconfigApplication {public static void main(String[] args) {ConfigurableApplicationContext ctx = SpringApplication.run(DemoSpringbootconfigApplication.class, args);// 获取自定义属性String name = ctx.getEnvironment().getProperty("custom.name");System.out.println("custom.name : " + name);}}

key的获取过程

通过getProperty("custom.name")进入源码,可以看到如下方法:

 ConfigurationProperty findConfigurationProperty(ConfigurationPropertyName name) {if (name == null) {return null;}for (ConfigurationPropertySource configurationPropertySource : getSource()) {ConfigurationProperty configurationProperty = configurationPropertySource.getConfigurationProperty(name);if (configurationProperty != null) {// 顺序遍历,存在则返回。所以getSource()中的元素顺序就是优先级return configurationProperty;}}return null;
}

在这里插入图片描述

根据调试截图可以看到,默认情况下,在resources目录中创建application.properties,在获取key时会依次从source集合中遍历。依次从系统属性、系统环境、配置文件中尝试获取。

application.properties优先级

在默认配置的基础上,依次在下列目录中添加application.properties文件,文件中仅定义同名的key,结果如下:

  1. 添加/resources/config/application.properties ,覆盖/resources/application.properties中的cutom.name
  2. 添加./application.properties,覆盖/resources/config/application.properties中的cutom.name
  3. 添加./config/application.properties,覆盖./application.properties中的cutom.name


    看一下获取key的过程:由于遍历时获取到key则返回,所以集合中元素的顺序即是多个application.properties配置文件的优先级,后四个元素刚好对应四个不同位置的配置文件

在这里插入图片描述

这里集合元素的顺序决定了多个application.properties的优先级,那么Springboot在加载多个配置文件时,肯定是优先从根目录的config文件夹读取并放入集合,其次从根目录读取,在然后从/resource/config/中读取,依次类推。

总结

  1. Springboot的配置来源包括 :
  • 命令行参数,优先级最高,例如:java -jar yourapp.jar --server.port=9090 --spring.profiles.active=prod
  • Java系统属性 java -Dserver.port=9090 -Dspring.application.name=myapp -jar yourapp.jar
  • 环境变量 例如环境变量SERVER_PORT=8081会映射到server.port属性
  • 外部配置文件 java -jar yourapp.jar --spring.config.location=file:/path/to/your/application.yml
  • 配置文件 application.properties /application.yml
    配置优先级通过调试源码可以看出,依次降低
  1. 多个application配置文件时,同样存在优先级:
    ./config/application.yml > ./application.yml > classpath:config/aplication.yml > classpath:application.yml

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

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

相关文章

N-gram详解

文章目录 一、什么是 N-gram?二、马尔可夫假设三、如何估计概率四、优缺点PS:补充参考 一、什么是 N-gram? 在自然语言处理中,n-gram 是一种重要的文本表示方法。n-gram 是指给定文本中连续的 n n n 个项目,这些项目可以是声音、单词、字…

Element Plus的el-tree-v2 组件实现仅叶子节点显示勾选框,并且只能单选

实现代码 <template><el-tree-v2:data"treeData":props"defaultProps"node-key"id"ref"treeRef"show-checkbox:check-strictly"true":expand-on-click-node"false"node-click"handleNodeClick&quo…

中小企业设备管理信息化:Spring Boot系统构建

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了中小企业设备管理系统的开发全过程。通过分析中小企业设备管理系统管理的不足&#xff0c;创建了一个计算机管理中小企业设备管理系统的方案。文章介绍了中小企业…

java springboot项目如何计算经纬度在围栏内以及坐标点距离

在Maven项目中&#xff0c;你可以通过向pom.xml文件中的<dependencies>部分添加以下内容&#xff0c;来添加GeoTools和JTS的依赖&#xff1a; xml <dependencies> <!-- JTS Topology Suite --> <dependency> <groupId>org.locationtech.jts…

AI服务器HBA卡的国产PCIe4.0/5.0 switch信号完整性设计与实现,支持定制(二)

表 &#xff12; 展示了 &#xff30;&#xff23;&#xff22; 板所选介质材料 &#xff30;&#xff33;&#xff32;&#xff14;&#xff10;&#xff10;&#xff10;&#xff21;&#xff35;&#xff33;&#xff17;&#xff10;&#xff13; &#xff0c; &#xff3…

FreeRTOS实时操作系统(2)

前言&#xff1a;FreeRTOS内容较多&#xff0c;分篇发布&#xff0c;较为基础&#xff0c;旨在梳理知识&#xff0c;适合入门的同学 &#xff08;基于正点原子STM32F103开发板V2&#xff09; &#xff08;对于本篇&#xff0c;若有疑问&#xff0c;欢迎在评论区留言&#xf…

萤石设备视频接入平台EasyCVR私有化视频平台变电站如何实现远程集中监控?

一、方案背景 随着城市经济的发展和电力系统的改造&#xff0c;变电站的数量和规模逐渐增加&#xff0c;对变电站的安全管理和监控需求也越来越高。视频监控系统作为重要的安全管理手段&#xff0c;在变电站中起到了关键的作用。 目前青犀视频研发的萤石设备视频接入平台EasyC…

[网络协议篇] UDP协议

文章目录 1. 简介2. 特点3. UDP数据报结构4. 基于UDP的应用层协议5. UDP安全性问题6. 使用udp传输数据的系统就一定不可靠吗&#xff1f;7. 基于UDP的主机探活 python实现 1. 简介 User Datagram Protocol&#xff0c;用户数据报协议&#xff0c;基于IP协议提供面向无连接的网…

CAN诊断答疑

1.”DUT不应该在开始CAN通信前发送显性脉冲或者无效的报文“这句话中的显性脉冲是什么意思 在CAN (Controller Area Network) 通信中&#xff0c;显性脉冲指的是 CAN 总线上的电压状态处于“显性”水平。当 CAN 总线上有两种电压状态&#xff1a; 显性状态 (Dominant state)&a…

Spring AOP原理

&#xff08;一&#xff09;Spring AOP原理 Spring AOP是基于动态代理来实现AOP的&#xff0c;但是在讲之前我们要来先认识一下代理模式 1.代理模式 其实代理模式很好理解&#xff0c;简单来说就是&#xff0c;原本有一个对象&#xff0c;然后来了另一个对象&#xff08;我们称…

26.Redis主从架构

Redis主从架构 redis主从架构搭建&#xff0c;配置从节点步骤&#xff1a; 1、复制一份redis.conf文件 2、将相关配置修改为如下值&#xff1a; port 6380 pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件 logfile "6380.log" dir /usr/local/…

3D-IC——超越平面 SoC 芯片的前沿技术

“3D-IC”&#xff0c;顾名思义是“立体搭建的集成电路”&#xff0c;相比于传统平面SoC&#xff0c;3D-IC引入垂直堆叠芯片裸片&#xff08;die&#xff09;和使用硅通孔&#xff08;TSV&#xff09;等先进封装技术&#xff0c;再提高性能、降低功耗和增加集成度方面展现了巨大…

同世界,共北斗|遨游通讯亮相第三届北斗规模应用国际峰会!

10月24日&#xff0c;第三届北斗规模应用国际峰会在湖南省株洲市隆重开幕&#xff0c;此次峰会以“同世界&#xff0c;共北斗”为主题&#xff0c;旨在加速北斗系统的市场化进程、促进其产业化布局及国际化拓展。全国政协副主席、农工党中央常务副主席杨震讲话并宣布开幕&#…

window7虚拟机VMware与主机共享文件

文件管理器》计算机网络右键》属性》高级共享设置——全部启用 新建文件夹》右键》属性》共享》选择可以共享的用户——我这里选的是所有用户 点击高级共享》权限》保存设置——设置文件权限 文件管理器》计算机网络》右键》属性》————查看虚拟机计算机名称 主机访问 主机…

构建安全基石:网络安全等级保护定级指南

在数字化时代&#xff0c;网络安全已成为企业与个人不可忽视的重要课题。网络安全等级保护定级指南&#xff0c;作为国家指导网络安全保护的重要文件&#xff0c;为各类机构提供了精准的安全防护蓝图。本文旨在深度解析网络安全等级保护定级指南的精髓&#xff0c;助力建构全面…

HarmonyOS 5.0应用开发——Navigation实现页面路由

【高心星出品】 文章目录 Navigation实现页面路由完整的Navigation入口页面子页面 页面跳转路由拦截其他的 Navigation实现页面路由 Navigation&#xff1a;路由导航的根视图容器&#xff0c;一般作为页面&#xff08;Entry&#xff09;的根容器去使用&#xff0c;包括单页面&…

基于FPGA的以太网设计(五)

之前简单介绍并实现了ARP协议&#xff0c;今天简单介绍一下IP协议和ICMP协议。 1.IP协议 IP协议即Internet Protocol&#xff0c;是网络层的协议。 IP协议是TCP/IP协议族的核心协议&#xff0c;其主要包含两个方面&#xff1a; IP头部信息。IP头部信息出现在每个IP数据报中…

【操作系统】Linux之进程管理一

第1关&#xff1a;获取进程常见属性 ret.pidgetpid(); ret.ppidgetppid(); 第2关&#xff1a;进程创建操作-fork pid_t pid fork(); if(pid-1) printf("创建进程失败&#xff01;"); else if(pid0) printf("Children"); else printf("Parent"); …

RWSENodeEncoder, KER_DIM_PE(lrgb文件中的encoders文件中的kernel.py)

该代码实现了一个基于核的节点编码器 KernelPENodeEncoder,用于在图神经网络中将特定的核函数编码(例如随机游走结构编码 RWSE)与节点特征相结合。通过将预先计算的核统计信息(如 RWSE 等)与原始节点特征结合,该编码器可以帮助模型捕捉图中节点的结构信息。该代码还定义了…

将 el-date-picker获取的时间数据转换成时间戳

在Vue.js中使用Element UI的el-date-picker组件时&#xff0c;你可以获取用户选择的日期并将其转换为时间戳。el-date-picker通常返回的是一个Date对象或一个格式化后的字符串&#xff08;取决于你如何配置它&#xff09;。下面是一个示例&#xff0c;展示了如何将el-date-pick…