【详细学习SpringBoot源码之属性配置文件加载原理(Bootstrap.properties|Bootstrap.yml)-8】

SpringBoot(三)项目配置 SpringBoot(三)项目配置(yml、properties) 阅读详情

一.知识回顾

【0.SpringBoot专栏的相关文章都在这里哟,后续更多的文章内容可以点击查看】
【1.SpringBoot初识之Spring注解发展流程以及常用的Spring和SpringBoot注解】
【2.SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】
【3.详细学习SpringBoot自动装配原理分析之核心流程初解析-1】
【4.详细学习SpringBoot自动装配原理之自定义手写Starter案例实操实战-2】
【5.IDEA中集成SpringBoot源码环境详细步骤讲解】
【6.初识SpringBoot核心源码之SpringApplication构造器以及run方法主线流程-3】
【7.详细学习SpringBoot核心源码之SpringApplication构造器&Run方法源码详细流程-4】
【8.详细学习SpringBoot核心源码之监听器原理-5(观察者设计模式、初始化并加载监听器核心流程、事件的发布器核心流程、SpringBoot中默认的监听器以及默认的事件类型)】
【9.详细学习SpringBoot源码之自定义监听器实战演练-6(自定义监听器、自定义监听事件、指定监听事件)】
【10.详细学习SpringBoot源码之属性配置文件加载原理(application.properties|application.yaml)-7】

二.SpringBoot源码之属性文件Bootstrap应用实操

2.1 Bootstrap.properties属性配置文件加载原理分析

上篇文章我们学习了SpringBoot中application.properties配置文件以及application.yml配置文件的加载原理,接下来我们就来学习关于boorstrap.properties配置文件的加载原理。小伏笔:bootstrap.properties中定义的文件信息会先与application.properties中的信息加载。

2.2 bootstrap配置文件的依赖导入使用

创建新的模块项目
在这里插入图片描述

因为SpringBoot中默认是不支持bootstrap.properties属性文件的。我们需要映入SpringCloud的依赖才可以。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.ljw</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
		<spring.cloud-version>Hoxton.SR5</spring.cloud-version>
	</properties>

	<dependencies>


		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<version>2.2.5.snapshot</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-bootstrap</artifactId>
			<version>3.0.0</version>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

</project>

然后创建对应的bootstrap.properties文件

在这里插入图片描述

同步的我们也会创建application.properties文件,修改掉其中一个属性

在这里插入图片描述

然后我们在controller中获取测试

在这里插入图片描述

访问测试:http://localhost:8080/testDemo
通过访问看到bootstrap.properties中的信息获取到了,同时age也被application.properties中的属性覆盖掉了。加载顺序到底是什么?为什么会覆盖呢?我们接下来分析。
在这里插入图片描述

三 SpringBoot源码之属性文件bootstrap加载原理分析

3.1 BootstrapApplicationListener监听器

  其实在这个依赖中会在对应的spring.factories文件中给我们提供新的监听器,也就是BootstrapApplicationListener监听器。

在这里插入图片描述

  而BootstrapApplicationListener监听触发的事件是ApplicationEnvironmentPreparedEvent事件,这个事件其实和我们前面介绍监听application.properties的时候的监听器ConfigFileApplicationListener监听的是同一个事件。

在这里插入图片描述
当启动的时候发布对应的事件,该监听器会触发相关的解析行为。

在这里插入图片描述

3.2 启动流程梳理

  搞清楚了监听器的关系后,我们来看下启动的流程代码具体是怎么执行的。
开始进入源码
在这里插入图片描述
继续进入
在这里插入图片描述

然后进入构造方法

在这里插入图片描述

在SpringApplication的构造方法中我们要注意两点:

  1. 监听器的加载
  2. main方法的主类记录

image.png

然后回来进入run方法

在这里插入图片描述

bootstrapApplicationListener监听器
在这里插入图片描述

Debug到第一个端点。

image.png

通过debug我们可以看到又进入了一次run方法。先看处理的结果。

image.png

然后我们再放过,继续

image.png

分两次加载,有先有后。先加载bootstrap.properties,然后再次加载application.properties配置文件。那么这里面的第一个加载的原理到底是什么呢?继续来分析。

3.3 bootstrap.properties的加载原理

  接下来看看是如果出现的一个父context来优先加载我们的bootstrap.properteis文件的
在这里插入图片描述
链路追踪过程
在这里插入图片描述

进入到BootstrapApplicationListener中来看。

在这里插入图片描述

然后进入到 bootstrapServiceContext方法中。

image.png

这儿我们看到有创建了一个SpringApplication对象。这个其实就是父Context对象了。

image.png

进入run方法你会发现,回到了前面

image.png

image.png

好了,关于【详细学习SpringBoot源码之属性配置文件加载原理(Bootstrap.properties|Bootstrap.yml)-8】就先学习到这里,更多的内容持续学习创作中。

SpringBoot源码分析之bootstrap 三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。第一个是算法关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本。 阅读详情

相关推荐

SpringBoot 配置文件加载顺序-跟源码

在面试的时候,这个问题也是经常会被问到的问题,面试官是在考验你对SpringBoot了解的深度SpringBoot加载配置文件的顺序是什么样的呢?下面我们一块跟着源码来看看。

yuan_ren_sheng的博客 674

springboot 读取bootStrap.properties流程

一、bootstrap.properties其实是属于spring-cloud的一个环境配置,示例如下 需要添加MAVEN包,否则不会加载bootStrap.properties。 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> <version&gt

lipengyao2010的专栏 5705

Spring Boot 进阶- Spring Boot如何加载自定义的配置文件?

在YML流行配置的当下,在很多的场景中我们采用YML格式的配置文件来进行配置。这里就需要用到@PropertySource注解的另外一个属性,指定加载的工厂类,通过自定义这个配置工厂类来实现加载YML格式的配置文件。Class

初学者 1692

springboot两种配置文件bootstrap.properties和application.properties的区别

Springboot推荐使用JavaConfig而非XML配置,但是Sprintboot中也可以使用XML配置,通过注解可以引入一个XML配置。

打不死的小强lee的博客 2807

springboot 读取配置文件 自定义配置文件 以及POM.xml 文件内容

在实际开发中,我们有时候因为开发和部署的环境的不同 一些定义的常量或者对象属性也需要更改 这样就很麻烦 在springboot 如火如荼的今天,我们是否也可以将那些因为不同环境而需要不同修改的常量或者对象也放在配置文件中呢 ,选择不同的配置环境 而无需更改代码,释放咱们的双手!!

胖虎儿的博客 1万+

SpringBoot支持bootstrap.yml/bootstrap.properties配置文件,需要导入spring-cloud-starter-bootstrap依赖

2、spring cloud starter alibaba nacos config,引用这个配置中心的依赖后,需要使用bootstrap.yml或bootstrap.properties 作为中转配置文件。3、不同类型配置文件读取优先级:bootstrap.yml/bootstrap.properties > application.yml/application.properties。1、导入依赖后,还需要开启 spring.cloud.bootstrap.enabled=true。

hkl_Forever的博客 6432

SpringBoot 常用的配置文件 application.yml和 bootstrap.yml的区别

SpringBoot默认支持properties和YAML两种格式的配置文件。前者格式简单,但是只支持键值对。如果需要表达列表,最好使用YAML格式。

Java+GO+JS全栈工程师-鹤冲天的博客:编程辅导~商务合作~技术交流 2547

脱壳--02.exe

程序开始 使用OD打开程序 发现无法利用esp定律 程序直接运行 查找模块间调用 随便找到一个函数的调用 发现是FF15方式调用 所以是vs的程序 vs程序大致分成两种 vs20xx (特征函数:GetSystemTimeAsFileTime)和 vc++6.0(特征函数:GetVersion) 通过链接器版本 发现是vc6.0 直接在GetVersion上下断点 重新运行程序 断点断下 返回到调用处 vc6.0和易语言的第一个CALL都是GetVers...

weixin_45012273的博客 1112

SpringBoot源码分析之bootstrap.properties文件加载的原理

对于SpringBoot中的属性文件相信大家在工作中用的是比较多的,对于application.properties和application.yml文件应该非常熟悉,但是对于bootstrap.properties文件和bootstrap.yml这个两个文件用的估计就比较少了,用过的应该清楚bootstrap.properties中定义的文件信息会先与application.properties中的信息加载。

埃泽漫笔 767

避开SM30维护视图的坑:自动更新字段+日志记录的5个关键配置步骤

本文深入解析了SAP ABAP开发中SM30维护视图的深度定制,聚焦于实现自动更新字段与日志记录功能。文章详细阐述了从SE54配置起点到核心编码的5个关键步骤,重点讲解了如何利用事件驱动模型(如05创建事件和01保存前事件)安全操作动态数据结构,并提供了避免常见陷阱的实用技巧,帮助开发者构建稳定可靠的自动化维护机制。

plant的博客 623

GX Works2系统启动失败排查指南:从环境配置到修复方案

在工业自动化与PLC编程调试中,软件启动异常是常见的工程痛点。当开发工具因系统环境配置不当而频繁报错时,往往不是简单的重启能解决的。运行库缺失、区域设置错误、临时目录失效或系统服务被禁用,都可能导致编程软件无法完成初始化流程。掌握从基础环境检查到系统组件修复的系统性排查思路,是提升工控开发效率的关键能力。本文从软件初始化原理出发,结合Windows系统维护实践,梳理一套适用于工业软件启动故障的通用诊断方法,并自然聚焦到三菱GX Works2常见启动失败问题的实际处理,帮助工程师快速定位并解决环境性故障,保障

weixin_42567046的博客 459

bootstrap.yml读取nacos配置中心的配置文件

最近搞nacos做为springboot的配置中心时,运行项目就一直报错,报错原因是没有加载到配置文件,可是nacos服务的地方又确确实实配置了配置文件,最后在启动的控制台中找到了一些线索,结合百度和源码查看找到了原因所在。 线索:(ps:因为不知道怎么截横向的长图只能这样了) 项目启动时的控制台输出 写着需要 spring.application.name.properties配置文件 后面找到了PropertySourceBootstrapConfiguration类 应该是默认读取配置中心以p

six_teen的博客 2万+

2024顶级提示工程工具:提升效率的12个神器

LlamaIndex虽然本身不是直接的提示词编辑工具,但其整个设计都围绕着如何有效地将外部知识融入LLM的提示词。它提供了结构化的方式来管理“上下文窗口”——即哪些私有数据应该被包含在提示词中。通过优化索引结构和检索策略,可以确保提示词中包含最相关、最高质量的上下文信息,从而大幅提升LLM基于私有数据回答问题的准确性和相关性。同时,LlamaIndex允许开发者针对不同的查询类型和数据特点定制提示词模板,这使得提示词的复用和优化更加系统化。

AIGC应用创新大全的博客 1098

springBoot项目配置文件加载优先级及同配置覆盖问题

springBoot项目配置文件加载优先级及同配置覆盖问题

天下唯一的利哥哥的博客 9697

嵌入式开发之瑞芯微RK356x--基本环境搭建

嵌入式环境搭建

NexyHO的博客 617

主题035:计算流体力学(CFD)

计算流体力学(Computational Fluid Dynamics, CFD)是利用数值方法求解流体流动、传热传质等问题的学科。CFD已成为化学反应工程中反应器设计和优化的重要工具。∂ρ∂t+∇⋅(ρu)=0 \frac{\partial \rho}{\partial t} + \nabla \cdot (\rho \mathbf{u}) = 0 ∂t∂ρ​+∇⋅(ρu)=0对于不可压缩流动:∇⋅u=0 \nabla \cdot \mathbf{u} = 0 ∇⋅u=0动量方程:∂(ρu)∂t+∇⋅(ρ

kkchenjj的博客 267

bootstrap.yml与application.yml详解

bootstrap.yml(bootstrap.properties)用来在程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等 application.yml(application.properties)应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

yangzhihua的专栏 1万+

python3.12 百分百解决安装dlib失败问题【研究原理后Bug已解决】

python3.12 百分百解决安装dlib失败问题【研究原理后Bug已解决】 python3.12版本下安装dlib失败。截图如下。试了网上很多方法都失败,耗费了很多时间终于找到适用于python3.12版本安装dlib的方法,亲测百分百成功。几乎尝试了所有的方法都不太行。终于找到安装的方法了。 原因分析: 版本匹配问题。我们现在是python3.12 使用pip根本无法安装。下面我们一起手动安装,1分钟搞定。

一键难忘的博客 7129

bootstrap与application的优先级及配置覆盖

在同一级目录下,会先比较前缀`bootstrap`、`application`,其中`bootstrap`比`application`的优先级高,其次再去比较后缀`.properties`、`.yml`,其中`.properties`比`.yml`优先级高

qq_60264381的博客 7730

ABAP Cloud define table 里的 not null 究竟在约束什么?——语义、场景与可运行示例

ABAP Cloud 中 not null 与 NULL 的用法解析 本文探讨了 ABAP Cloud 中 not null 关键字的语义与使用场景,对比了传统 ABAP 与 ABAP Cloud 在表字段定义上的差异: 核心概念 not null 是数据库层的列约束,强制字段不能存储 NULL 值 ABAP Cloud 通过 DDL 显式声明列是否允许 NULL,HANA 上 CDS 表默认创建为 NOT NULL 使用建议 主键、外键、审计字段等必须使用 not null 业务上可缺失的字段(如批准日期

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 299

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Spring Boot的配置文件加载优先级

详细介绍了Spring Boot的配置文件的加载优先级。

终生学习践行者 5574

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SpringBoot自定义配置文件加载实战

在YML流行配置的当下,在很多的场景中我们采用YML格式的配置文件来进行配置。这里就需要用到@PropertySource注解的另外一个属性,指定加载的工厂类,通过自定义这个配置工厂类来实现加载YML格式的配置文件。Class<?首先我们得创建一个加载YML配置的工厂配置类。并且继承了DefaultPropertySourceFactory,重写了createPropertySource()方法。if (!}else{

2501_93873871的博客 361

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

springcloud-config client配置文件为什么要用bootstrap命名

搭建srpingcloud-config server端的时候,配置文件可以用application.yml 或 application.properties 但是为什么在config client端却要使用bootstrap.yml或bootstrap.properties呢? 因为bootstrap.properties的加载是先于application.propertie

以梦为马 1万+

logback源码阅读(四) 为什么日志系统初始化了两次?bootstrapContext

bootstrap和application有什么区别

Ethan_199402的博客 784

怎么创建SpringBoot项目

  上述中讲到了怎么创建SpringBoot项目,那么现在就来介绍下SpringBoot配置文件的两种格式yml和properties    首先呢发上一份application.properties    在放上一份相同配置的application.yml    我们可以看到,相同的配置下yml显得更加简洁, 但是yml却拥有相当严格的格式,他的层级关系必须以相应的缩进表示    可以使2空格可...

weixin_34121282的博客 80

SpringBoot配置优先级

SpringBoot配置优先级

m0_63164811的博客 687
上一篇: 【LeetCode每日一题:1754. 构造字典序最大的合并字符串~~~双指针+贪心算法】
下一篇: 【LeetCode每日一题:1739. 放置盒子~~~找规律+数学公式推导】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值