当前位置: 首页 > news >正文

SpringBoot启动流程与配置读取全解析

摘要
SpringBoot启动时,配置读取发生在Bean创建之前,确保依赖配置的Bean能正确初始化。加入Nacos/SpringCloudConfig后,流程变为:先通过bootstrap.yml获取配置中心地址(避免循环依赖),再拉取远程配置合并到环境变量(Environment),最后创建Bean。Nacos简化了架构(内置配置管理),而SpringCloudConfig需独立Git+ConfigServer。两者均通过bootstrap阶段(类似BIOS)引导配置加载,核心思想是先定位配置源,再构建应用上下文。这一机制是Sentinel、Seata等框架动态配置的基础,后续可结合@RefreshScope理解动态刷新原理。

目录

一、普通 Spring Boot 启动流程

整体流程

配置读取发生在哪里?

二、现在加入 Nacos Config

连接Nacos需要地址。

本地启动配置

三、Spring Cloud Config流程

四、为什么叫 bootstrap?

五、Spring Boot启动层级

六、Nacos Config和Spring Cloud Config插入位置

Spring Cloud Config

Nacos Config

七、为什么你感觉Nacos简单?

八、这个知识为什么重要?

Sentinel

Seata

SkyWalking

九、你现在应该记住一个简化版


好的,我们这一节专门解决你刚才卡住的核心:

Spring Boot到底什么时候读取配置?Nacos Config、Spring Cloud Config到底插入在哪一步?

你现在不用管 Config 的代码,先把启动流程建立起来。


一、普通 Spring Boot 启动流程

先看你最熟悉的情况。

一个普通项目:

product-service src/main/resources application.yml

启动:

@SpringBootApplication public class ProductApplication { public static void main(String[] args){ SpringApplication.run( ProductApplication.class, args ); } }

整体流程

画成:

JVM启动 | ↓ main方法执行 | ↓ SpringApplication.run() | ↓ 读取 application.yml | ↓ 创建 Spring 容器 | ↓ 扫描 Bean | ↓ 创建 Controller/Service/Mapper | ↓ 启动 Tomcat | ↓ 服务运行

重点:

配置读取发生在哪里?

非常早。

在:

创建Bean之前

为什么?

因为创建Bean可能需要配置。

例如:

你的代码:

@Service public class UserService { @Value("${jwt.secret}") private String secret; }

Spring创建UserService的时候:

必须知道:

jwt: secret: abc123

在哪里。

所以:

先读配置。

再创建对象。


二、现在加入 Nacos Config

你之前 AIWear其实已经接触类似思想。

以前:

服务 | | application.yml

现在:

服务 | | Nacos | | 配置

启动流程变:

JVM启动 | ↓ main方法 | ↓ 读取基础配置 | ↓ 连接Nacos | ↓ 拉取远程配置 | ↓ 合并配置 | ↓ 创建Spring Bean | ↓ 启动服务

注意:

这里有一个关键:

连接Nacos需要地址。

例如:

spring: cloud: nacos: config: server-addr: localhost:8848

这个配置必须提前知道。

所以:

它不能来自Nacos。

否则:

我要去Nacos拿配置 ↓ 但是不知道Nacos在哪里 ↓ 死循环

所以:

一定存在:

本地启动配置

比如:

bootstrap.yml

里面:

Nacos地址

三、Spring Cloud Config流程

现在换成:

Git + Config Server。

架构:

Git | | ↓ Config Server | | ↓ product-service

启动:

product-service启动 | ↓ 读取 bootstrap.yml | ↓ 知道 Config Server地址 | ↓ 访问 Config Server | ↓ Config Server访问Git | ↓ 返回配置 | ↓ 创建Spring Bean | ↓ 启动服务

所以:

bootstrap.yml的角色:

不是存业务配置。

而是:

告诉Spring:配置在哪里。


四、为什么叫 bootstrap?

bootstrap:

英文:

启动、引导。

它的意思:

在Spring正式启动之前,引导Spring完成准备工作。

类似电脑:

开机:

第一阶段:

BIOS启动。

第二阶段:

Windows启动。

BIOS不是你的日常系统。

但是没有BIOS:

Windows启动不了。

bootstrap类似:

BIOS。


五、Spring Boot启动层级

我们画一个更细的。

JVM | ↓ SpringApplication | ↓ Environment准备阶段 | ↓ 读取配置文件 | ----------------- | | bootstrap.yml application.yml | ↓ Config/Nacos配置 | ↓ 创建ApplicationContext | ↓ 创建Bean | ↓ Tomcat启动

这里:

Environment是什么?

简单理解:

Spring保存配置的地方。

比如:

你的配置:

server: port:8080 jwt: secret:abc

最终都会进入:

Environment

里面。

然后:

@Value @ConfigurationProperties

都是从Environment拿。


六、Nacos Config和Spring Cloud Config插入位置

对比:


Spring Cloud Config

启动 ↓ bootstrap.yml ↓ Config Server ↓ Git ↓ Environment ↓ Bean

Nacos Config

启动 ↓ bootstrap/application配置 ↓ Nacos Server ↓ Environment ↓ Bean

本质:

一样。

区别:

配置存哪里。


七、为什么你感觉Nacos简单?

因为Nacos把很多事情合并了。

例如:

Spring Cloud Config:

Git + Config Server + Config Client

三个东西。

Nacos:

Nacos Server 全部包含

所以:

你之前学Nacos配置中心:

其实已经理解80%。

现在只是补充:

Spring Cloud原生方案。


八、这个知识为什么重要?

因为以后学:

Sentinel

你会看到:

应用启动 ↓ 加载规则 ↓ 创建保护组件 ↓ 运行

也是启动生命周期。


Seata

也是:

服务启动 ↓ 连接TC ↓ 注册RM ↓ 参与事务

SkyWalking

也是:

JVM启动 ↓ Agent加载 ↓ 增强字节码 ↓ 监控运行

所以:

Spring Boot启动流程是所有框架的基础。


九、你现在应该记住一个简化版

不用背源码。

记:

Spring Boot启动: 1. 找配置 2. 创建环境 3. 创建容器 4. 创建Bean 5. 启动服务 配置中心: 插在第1步和第2步之间。

对应:

普通: application.yml Config: bootstrap ↓ Config Server ↓ Git Nacos: bootstrap/application ↓ Nacos

到这里,Config的核心思想已经理解。

下一步我们可以进入Spring Cloud Config动态刷新,也就是:

修改配置以后,为什么服务不用重新打包?Spring是怎么重新加载Bean的?

这个会和你之前学的 Nacos@RefreshScope联系起来。

http://www.jsqmd.com/news/1239297/

相关文章:

  • C++跨平台HTTP客户端cpr实战:从编译到部署的完整指南
  • AI搜索如何秒级过滤噪音?揭秘谷歌/微软内部使用的5步信息熵压缩法
  • Spring AI与PGVector集成实战:向量数据库在Java生态中的应用
  • 劳力士**服务项目及价格查询|维修地址与电话**信息声明(2026年7月最新) - 劳力士服务中心
  • Gartner 预测:2026 年 AI 模型与平台支出增 63.4%,高效益供应商成赢家!
  • 2026 年现阶段,湖州知名的铸铁闸门制造厂哪家专业,别再花冤枉钱!这套老式闸门如何保值? - 行业推荐官[官方】--
  • 大模型上下文限制突破:子代理架构与并行处理技术
  • 中医知识数字化平台构建与关键技术解析
  • 多头注意力机制解析与Transformer应用实践
  • 辛普森案DNA证据争议与程序正义的世纪审判
  • C++控制结构深度解析:从if/for到循环神经网络的核心思想
  • Go语言结构体方法接收器详解:值接收器与指针接收器
  • Codebase-Memory-MCP技术解析:AST知识图谱如何节省99% Token
  • 2026年7月最新伯爵佛山三水万达广场维修保养服务电话 - 亨得利钟表维修中心
  • AI工具小白入门组合(限时公开版):内部培训文档首次流出,含3大认知陷阱预警与实操检查表
  • C++缺省参数与函数重载:语法糖背后的工程实践与设计思想
  • 影刀RPA 社交媒体数据分析:粉丝画像与内容表现
  • 技术栈对应:Vue (前端) + SpringBoot (Java 后端) =》 Python 全场景配套
  • 深入解析EDMA3事件与中断寄存器:从硬件原理到软件实战配置
  • 2026图像处理技术趋势与选题方向解析
  • 问卷设计实战指南:从结构到投放的7大核心技巧
  • 三菱 FX3U PLC 通过以太网模块对接 MES 实操讲解
  • 2026年7月欧米茄武汉****售后网点地址与客户服务热线最新**公示 - 欧米茄服务中心
  • 纪录片思维在技术实践中的应用:从用户行为分析到数据叙事
  • 大模型Benchmark评测:从原理到实践的技术解析
  • AI视频配音自动同步实战手册(2024最新版):从Whisper+SadTalker到自研对齐算法的工业级落地路径
  • 基于MFC与Ymodem协议的串口文件传输工程实现详解
  • 深入解析MMC/SD/SDIO主机控制器:数据格式、中断与电源管理实战
  • TI C674x DSP功耗管理实战:从动态/静态功耗原理到PSC/PLLC配置
  • 网络基础与局域网技术