SpringBoot配置文件高级用法实战

❃博主首页 : 「码到三十五」 ,同名公众号 :「码到三十五」,wx号 : 「liwu0213」
☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关>
♝博主的话 : 搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,一起筑基

Spring Boot配置文件的优先级是一个重要的概念,它决定了当存在多个配置文件时,哪个配置文件中的配置将被优先采用。

文章目录

      • 一、总体优先级顺序
      • 二、应用配置文件的详细优先级
      • 三、文件类型优先级
      • 四、特定环境配置
      • 五、配置文件高级用法
          • 5.1 修改配置文件名
          • 5.2 修改配置文件位置
          • 5.3 使用文件系统路径
          • 5.4 附加配置文件
          • 5.5 可选位置
          • 5.6 通配符位置
          • 5.7 特定配置文件
          • 5.8 导入其它配置
          • 5.9 导入无扩展文件
      • 六、多配置文件处理方式
        • 背景需求
        • 解决方法一
        • 解决方法二

一、总体优先级顺序

  1. 命令行参数:通过命令行启动参数指定的配置拥有最高优先级。这包括java -jar命令后跟随的配置参数。

  2. 来自SPRING_APPLICATION_JSON的属性:嵌入在环境变量或系统属性中的JSON格式配置信息,优先级仅次于命令行参数。

  3. 系统属性:通过Java系统属性传递的配置值,例如使用-D参数设置的值。

  4. 环境变量:操作系统环境变量中的配置值。

  5. 随机生成的属性(仅用于开发中的随机端口号等):Spring Boot在开发环境中可以随机生成一些属性,例如随机端口号。

  6. 应用配置文件(application.propertiesapplication.yml:按照特定顺序加载的配置文件。

  7. @Configuration类中通过@PropertySource注解定义的属性:通过编程方式指定的配置文件。

  8. 默认属性(通过SpringApplication.setDefaultProperties指定的默认属性):这些属性在所有其他特定属性源之后加载,因此优先级最低。

二、应用配置文件的详细优先级

对于application.propertiesapplication.yml等应用配置文件,Spring Boot按照以下顺序加载,优先级从高到低:

  1. 命令行中指定的配置文件:通过--spring.config.location参数指定的配置文件。

  2. 项目目录下的config子目录:位于项目根目录下的config(和jar包同一目录)文件夹中的配置文件。

  3. 项目根目录:项目根目录(和jar包同一目录)下的配置文件。

  4. 类路径下的configsrc/main/resources/config目录中的配置文件。

  5. 类路径根目录src/main/resources目录中的配置文件。

特别注意的是,配置文件内容是在的合并的前提下执行优先级,即不重复的配置内容会合并!

三、文件类型优先级

在同一位置下,如果存在多种类型的配置文件(如.properties.yml.yaml),它们的优先级顺序为:

  1. .properties
  2. .yml
  3. .yaml

四、特定环境配置

当使用特定环境的配置文件(如application-dev.ymlapplication-prod.yml)时,激活的特定环境配置文件将覆盖通用配置文件中的相同属性。如果指定了多个特定环境配置文件,则后面的配置文件将覆盖前面的配置文件中的相同属性。

五、配置文件高级用法

假设有以下配置文件:

在这里插入图片描述

  • 类路径根目录下application.yml内容:

    pack:name: root-nameage: 11
    
  • 类路径config包下application.yml内容:

    pack:name: classpath/config-name
    

读取配置pack.namepack.age,输出结果为:

name = classpath/config-name, age = 11

这验证了配置文件内容的合并以及优先级规则。

5.1 修改配置文件名

使用spring.config.name环境属性可以修改默认的配置文件名:

java -jar springboot-configfile-1.0.0.jar --spring.config.name=pack
5.2 修改配置文件位置

使用spring.config.location环境属性指定配置文件的位置:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml,optional:classpath:/config/pack1.yml

使用optional:前缀可以忽略文件不存在的错误。也可以指定目录让Spring Boot自动拼接文件名:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/config/ --spring.config.name=pack
5.3 使用文件系统路径

指定文件系统中的配置文件路径:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml,optional:file:f:/
--spring.config.name=pack
5.4 附加配置文件

如需要添加其它的配置文件,并非是替换默认的配置文件,可从附加位置加载属性(可以覆盖默认位置中的属性值)。

使用spring.config.additional-location加载额外的配置文件:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml --spring.config.name=pack --spring.config.additional-location=optional:file:f:/pack-akf.yml
5.5 可选位置

默认当指定的配置数据文件不存在时,SpringBoot会抛出ConfigDataLocationNotFoundException异常,应用程序将无法启动.

使用optional:前缀忽略配置文件不存在的错误:

java -jar springboot-configfile-1.0.0.jar --spring.config.location=optional:classpath:/pack.yml --spring.config.on-not-found=ignore

忽略所有ConfigDataLocationNotFoundException并始终继续启动应用程序,可以使用spring.config.on-not-found属性

5.6 通配符位置

如配置文件位置的最后一个路径段包含*字符,则视为通配符位置。通配符会在加载配置时展开,因此直接子目录也会被检查,使用通配符加载多个配置文件:

…代码省略,请看下面的获取方式

5.7 特定配置文件

…代码省略,请看下面的获取方式

5.8 导入其它配置

在配置文件中使用 spring.config.import 属性从其他位置导入更多配置数据。导入会在被发现时被处理,并被视为紧接在声明导入的文档下面插入的附加文档:

pack:name: root name    age: 66
---  
spring:config:import:- file:f:/pack-akf.yml

*** …代码省略…完整代码请关注博主公众号 [ 码到三十五 ] 回复 [ springboot ] 自动获取…***

5.9 导入无扩展文件

…代码省略…

六、多配置文件处理方式

背景需求

程序在部署的时候,一般是将配置文件放在jar包的外面,而当存在多个文件需要加载时,如项目中有:

cfg1.properties
cfg2.properties
解决方法一

合并所有配置文件至一个文件中配置加载,然后使用spring.config.location配置加载。
把cfg1.properties和cfg2.properties中的配置都合并至cfg.properties中。

java -jar app.jar --spring.config.location=file:/path/to/cfg.properties
解决方法二

保持文件的各自独立,使用spring.config.location属性来指定应用程序的配置文件路径。可以指定多个配置文件,使用逗号分隔的文件路径,例如:

java -jar api.jar --spring.config.location=file:/path/cfg1.properties,file:/path/cfg2.properties

关注公众号[码到三十五]获取更多技术干货 !

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

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

相关文章

u盘数据丢失怎么办?以下这四招教你轻松找回!

重要的文件资料要是不小心手滑删除了&#xff0c;轻则遭受领导的责骂&#xff0c;重则就是直接受到老板的警告了&#xff0c;所以打工人应该要人手必备数据找回的技巧&#xff0c;尤其是在针对已经拷贝好了数据在u盘当中时&#xff0c;更是需要快速去找到数据恢复的技巧&#x…

ARM 架构与技术综述

目录 认识 ARM ARM 发展历史 指令集 ARM 公司产品分类 ARM 体系结构 数据类型约定 处理器的 32 位和 64 位含义 指令集 ARM 处理器的工作模式 CPU (内核) 组成 寄存器 时钟 认识 ARM ARM 可以指&#xff1a; 一家公司。一种技术。一系列处理器。 架构&#xff1a;A…

Python数据结构实战:列表、字典与集合的高效使用

前言 在编程中&#xff0c;选择合适的数据结构对于提高程序效率至关重要。本文将介绍Python中最常用的数据结构——列表&#xff08;list&#xff09;、字典&#xff08;dict&#xff09;和集合&#xff08;set&#xff09;&#xff0c;并探讨它们的内部实现以及如何高效地使用…

量化金融人都在看哪些顶刊

精选了 7 种量化金融人都在看的顶刊&#xff0c;从最经典的有效市场假说理论&#xff0c;到最新的关于加密货币的研究&#xff0c;都发表在这些期刊上。 Journal of Finance 应该是毫无争议的 No.1。 创刊于1946年&#xff0c;是由美国金融协会&#xff08;American Finance A…

fastjson-1.2.24利用

参考视频&#xff1a;fastjson反序列化漏洞2-1.2.24利用 参考博客&#xff1a;Fastjson系列二——1.2.22-1.2.24反序列化漏洞 分析版本 fastjson1.2.24 JDK 8u141 fastjson反序列化特点 不需要实现Serializable 因为对于找不到符合条件的反序列化器&#xff0c;就把类当作…

华为的流程体系

缘由 2010年&#xff0c;华为销售额为1850亿元&#xff0c;其中国际市场占65%&#xff0c;净利润238亿元。当时&#xff0c;公司员工达11万人&#xff0c;公司处理合同达5万多个&#xff0c;290万个订单&#xff0c;大量的工作是手工处理&#xff0c;没有统一的流程支持&#…

机器学习流程图

第一部分&#xff1a;课程使用的技术栈 &#xff08;1&#xff09;Numpy 科学计算基础库&#xff0c;矩阵运算&#xff0c;线性代数 &#xff08;2&#xff09;matplotlib 绘图库&#xff0c;数据可视化 &#xff08;3&#xff09;Scikit 封装了各种分类&#xff0c;回归…

释放群众的创造力:打赢网络犯罪战争

关注公众号网络研究观获取更多内容。 企业业非但没有享受到技术带来的好处&#xff0c;反而承受着高昂的成本。 事情不应该是这样的。 企业投资 IT 是因为相信它可以改变他们与客户的关系、供应链和业务敏捷性。在过去 12 个月中&#xff0c;我们还看到人们对 AI 如何增强…

面向对象之设计模式,四种内部类,类关系

面向对象 1. 类关系 继承 使用extends表示,类和类单继承,接口和接口多继承,多个逗号隔开 又叫泛化关系 实现 类和接口是多实现关系,多个逗号隔开,通过关键字 implements表示 依赖 一个类中的局部变量 ,保存了另一个类对象 关联 又叫强依赖,一个类中的成员变量,是另一个类对象…

【Python】爬取网易新闻今日热点列表数据并导出

1. 需求 从网易新闻的科技模块爬取今日热点的列表数据&#xff0c;其中包括标题、图片、标签、发表时间、路径、详细文本内容&#xff0c;最后导出这些列表数据到Excel中。 网易科技新闻网址&#xff1a;https://tech.163.com 2. 解决步骤 2.1 前期准备 爬虫脚本中需要引用…

【数据泄露】最新 FBI 官员数据库泄露事件

前言 近日&#xff0c;一名化名为 “rpk” 的威胁行为者在 breachforums 论坛上声称泄露了包含 22,175 名 FBI 官员数据的数据库。此事件迅速引起了广泛关注&#xff0c;主要因为 FBI 作为美国联邦调查局&#xff0c;不仅是美国司法部的主要调查机构&#xff0c;还是美国情报界…

python实现图像分割算法4

python实现流域变换算法 算法原理基本步骤数学模型Python实现详细解释优缺点应用领域流域变换(Watershed Transform)算法是一种用于图像分割的技术,特别适用于分割重叠和相邻的对象。它的基本思想是将图像视为拓扑表面,通过模拟水的流动来分割区域。流域变换广泛应用于医学…

Python实战:wxauto与百度千帆大模型结合快速实现微信智能回复机器人

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

AI PC处理器架-低功耗、NPU算力、大模型

AI PC处理器架构变化&#xff1a;ARM低功耗、引入NPU算力、大模型落地端侧 ARM架构以简洁的指令集设计&#xff0c;快速执行每条命令&#xff0c;实现低功耗下的高效性能。其核心理念是节能和效率&#xff0c;为电池驱动设备提供了理想选择。相较之下&#xff0c;x86架构虽指令…

XXE-lab-master靶场:PHP_xxe

目录 有回显 测试回显位置 构建payload 无回显数据外带 构建payload 漏洞修复 XXE-lab是一个一个包含php,java,python,C#等各种语言版本的XXE漏洞靶场。 下载地址&#xff1a;https://github.com/c0ny1/xxe-lab 将PHPStudy的中间件与版本信息调制为 php-5.4.29Apache 以…

@SchedulerLock注解使用

文章目录 Scheduled注解参数介绍建表配置类示例参考 如果服务中使用了Scheduled注解&#xff0c;且服务部署了多个节点。那么在同一时刻&#xff0c;所有节点都会执行定时任务。但有有些任务我们只需执行一次&#xff0c;这就需要使用分布式锁的方式来控制&#xff0c;如可以使…

七夕情人节有什么好物推荐?五款性价比超高的产品推荐!

亲爱的朋友们&#xff0c;随着七夕情人节的临近&#xff0c;空气中弥漫着浪漫与甜蜜的气息。在这个专属恋人的节日里&#xff0c;团团知道大家在为心爱的人挑选礼物时可能会感到纠结。因此&#xff0c;我根据个人的浪漫经验和精心的市场挑选&#xff0c;为大家准备了一份情人节…

基础实验回顾

一、虚拟机网络设定 克隆一台node1 在node1上进行网络配置 进入网卡配置目录 # 红帽9网卡配置文件目录&#xff0c;其他版本不一样 [rootlocalhost ~]# cd /etc/NetworkManager/system-connections/网卡配置文件 [rootlocalhost system-connections]# vim ens160.nmconnect…

WordPress 轻量级产品官网类主题 CeoNova-Pro_v4.4绕授权开心版

CeoNova-Pro 主题是一款轻量级、且简洁大气、产品官网类主题&#xff0c;定位于高端产品官网、同时包含了知识付费、定制服务、问答社区、论坛交流、网址导航、以及付费产品购买下载等全方位覆盖。 源码下载&#xff1a;ceonova-pro4.4.zip 变更日志 新增虚拟资源隐藏信息增…

GitHub最全中文排行榜开源项目,助你轻松发现优质资源!

文章目录 GitHub-Chinese-Top-Charts&#xff1a;中文开发者的开源项目精选项目介绍项目特点核心功能1. 热门项目榜单2. 详细项目信息 如何使用覆盖范围软件类资料类 GitHub-Chinese-Top-Charts&#xff1a;中文开发者的开源项目精选 在全球范围内&#xff0c;GitHub已经成为了…