SpringBoot配置文件高级用法实战

news2024/9/24 7:14:18
❃博主首页 : 「码到三十五」 ,同名公众号 :「码到三十五」,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-name
      age: 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.coloradmin.cn/o/1976284.html

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

相关文章

2024年8月AI内容生成技术的现状与未来:从文生文到跨模态交互的全景分析

2024年8月AI内容生成技术的现状与未来&#xff1a;从文生文到跨模态交互的全景分析 大家好&#xff0c;我是猫头虎&#xff01;&#x1f680; 随着AI在内容生成领域的爆发式发展&#xff0c;从2022年末开始&#xff0c;AI生成技术已经走过了文生文&#xff08;AIGC&#xff09…

Elasticsearch VS Typesense! Elasticsearch未来会被其它搜索引擎取代吗?

近期网上流行一批新的搜索引擎&#xff0c;动不动就大言不惭&#xff0c;要跟龙头老大Elasticsearch比&#xff0c;想把Elasticsearch击败。 1. Typesense 太猖狂了&#xff0c;对Elasticsearch极为不敬 如近期炒作很猖狂的Typesense开源搜索引擎&#xff0c;一出来就急着挑战…

Study--Oracle-07-ASM常用维护操作(五)

一、ASM创建新的磁盘组 1、查看系统中可用的磁盘 set lines 150; col name for a35; col path for a35; select group_number,path, state, name, total_mb, free_mb from v$asm_disk; 2、磁盘组操作 创建磁盘组 create DISKGROUP DATADGV2 EXTERNAL REDUNDANCY DISK /dev…

OpenGL笔记十八之透视投影矩阵实验-perspective函数

OpenGL笔记十八之透视投影矩阵实验-glm::perspective函数 —— 2024-08-03 下午 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十八之透视投影矩阵实验-glm::perspective函数1.案例构造2.视张角60&#xff0c;相机位置(0.0f,0.0f,5.0f)3.视张角60&…

Yolov8添加ConvNetV1和V2模块

Yolov8添加ConvNet模块 1 ConvNet系列相关内容 &#xff08;1&#xff09;2022 论文地址&#xff1a;A ConvNet for the 2020s Code Link 如下图所示&#xff0c;精度、效率、尺寸都很不错。 论文的摘要如下&#xff1a; 视觉识别的“咆哮的 20 年代”始于视觉注意力 &…

V.PS澳大利亚VPS测评

V.PS的澳大利亚VPS位于澳大利亚悉尼市&#xff0c;回程三网强制是走的联通AS9929/CUII链路&#xff0c;是一种轻负载企业级回国路由...而且IP解锁能搞定奈飞、迪士尼、steam、chatgpt等&#xff0c;大洋洲流媒体解锁&#xff0c;尤其是澳大利亚的流媒体&#xff0c;比如澳大利亚…

Leetcode 3143. 正方形中的最多点数(二分、数组字符串、位运算集合)

方法一&#xff1a;二分答案&#xff08; 位运算集合&#xff09; class Solution { public:// 二分答案 顶多O(NlogN),logn去找最后的答案, n用来确定本次找的答案是否正确int maxPointsInsideSquare(vector<vector<int>>& points, string s) {int res 0;au…

opencv-图像基础变换

1&#xff0c;缩放 缩放是对图像的大小进行调整 缩放矩阵&#xff0c;相当于x和y乘一个常数 例如将图像放大两倍 import cv2 img cv2.imread(1.jpg) img cv2.resize(img, (400,400)) img cv2.resize(img, (0,0), fx3, fy1)#表示x方向扩大三倍&#xff0c;y方向不变 2&…

重学 KMP 小记

推荐在 cnblogs 上阅读。 重学 KMP 小记 前言 KMP 这个东西赛时用到的几率很小&#xff08;虽然圣人说概率不小、也不是很大&#xff09;&#xff0c;但是如果一旦考字符串类的题又极可能考匹配问题。当时掌握得也是一知半解&#xff0c;所以现在来重学来了。 情境引入 现…

【资料集】数据库设计说明书(Word原件提供)

2 数据库环境说明 3 数据库的命名规则 4 逻辑设计 5 物理设计 5.1 表汇总 5.2 表结构设计 6 数据规划 6.1 表空间设计 6.2 数据文件设计 6.3 表、索引分区设计 6.4 优化方法 7 安全性设计 7.1 防止用户直接操作数据库 7.2 用户帐号加密处理 7.3 角色与权限控制 8 数据库管理与维…

g++ 11 cuda11编译报错std::function “...“

换个gcc版本就行了 先安装gcc9 apt-get install gcc-9 g-9

蓝牙协议栈

BLE协议栈整体架构 首先了解一下&#xff0c;BLE协议栈(protocol stack)整体架构。 如上图所述&#xff0c;要实现一个BLE应用&#xff0c;首先需要一个支持BLE射频的芯片&#xff0c;然后还需要提供一个与此芯片配套的BLE协议栈&#xff0c;最后在协议栈上开发自己的应用。可…

新版 Navicat Premium 17 安装教程 (亲测可用)

前几天安装了新版本Navicat Premium 17、Navicat是用于MySQL的管理工具&#xff0c;使用非常方便&#xff0c;下面就记录一下安装过程&#xff0c;也方便其他正在使用Navicat Premium工具的同学参考&#xff0c;谢谢。 MySQL的安装配置 | MySQL的基础知识 | 基于Node.js应用的…

【课程总结】Day17(上):NLP自然语言处理及RNN网络

前言 在机器学习章节【课程总结】Day6&#xff08;上&#xff09;&#xff1a;机器学习项目实战–外卖点评情感分析预测中&#xff0c;我们曾借助sklearn进行了外卖点评的情感分析预测&#xff1b;接下来&#xff0c;我们将深入了解自然语言处理的基本概念、RNN模型以及借助RN…

深度学习环境完整安装(Python+Pycharm+Pytorch cpu版)

在这里&#xff0c;我们将引导您逐步完成深度学习环境的完整安装&#xff0c;助您踏上从Python到PyTorch的探索之旅。通过本博客&#xff0c;您将轻松掌握如何设置Python环境、使用Pycharm进行开发以及安装Pytorch&#xff0c;成为一名具备完整深度学习环境的实践者。让我们一起…

RGB图像的读取与保存

目录 1、安装imageio 2、读取照片 3、保存照片 4、resize 5、示例代码 1、安装imageio pip install imageio -i https://pypi.tuna.tsinghua.edu.cn/simple 2、读取照片 import imageio img imageio.imread(image_path) 3、保存照片 import imageio import numpy as…

【STC32G12K128开发板】第3-10讲:SG90舵机驱动

第3-10讲&#xff1a;SG90舵机驱动 学习目的了解SG90舵机的相关参数、控制方式。编程用PWM驱动SG90舵机&#xff0c;通过按键改变舵机旋转角度。 舵机简介 规格参数 “舵机”这个名号其实是一个俗称&#xff0c;是那些玩航模、船模的人起的名字&#xff0c;因为这种电机常被用…

yolov8pose 部署rknn(rk3588)、部署地平线Horizon、部署TensorRT,部署工程难度小、模型推理速度快,DFL放后处理中

特别说明&#xff1a;参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档&#xff0c;如有侵权告知删&#xff0c;谢谢。 模型和完整仿真测试代码&#xff0c;放在github上参考链接 模型和代码。 之前写了yolov8、yolov8seg、yolov8obb 的 DFL 放在模型中和放在后处理…

界面控件DevExpress WinForms,支持HTML CSS提升用户体验(一)

DevExpress WinForms现在可以利用HTML/CSS强大的功能&#xff0c;帮助受DevExpress驱动的WinForms应用程序引入现代的UI元素和用户体验&#xff01; P.S&#xff1a;DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。Dev…

E25.【C语言】练习:修改二进制序列的指定位

十进制13-->二进制01101 现要求二进制序列的第5位修改为1&#xff0c;再改成0 复习&#xff1a;逻辑运算 非&#xff08;NOT&#xff09;&#xff08;C语言&#xff1a;~&#xff09; x0&#xff0c;NOT x-->1&#xff1b;x1&#xff0c;NOT x-->0 与&#xff08;…