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

【碎片化学习】SpringBoot服务的启动过程

Spring Boot 服务的启动过程大致可以分为以下几个阶段,每个阶段负责不同的初始化和配置工作。以下是 Spring Boot 启动过程的详细描述:

1. 启动阶段(Application启动)

启动方式: SpringApplication.run(Application.class, args);
处理逻辑:
Spring Boot 会初始化一个 SpringApplication 实例并设置相关的配置信息。
启动过程中,会创建 ApplicationContext(Spring 容器)并加载所需的 bean 定义和配置文件。
初始化 Spring Boot 特有的自动配置模块,处理应用的环境配置(如 application.properties 或 application.yml)。

2. 环境准备阶段(Environment Preparation)

处理逻辑:
Spring Boot 会根据命令行参数、系统环境变量、配置文件等来构建应用环境。
启动时会创建 ConfigurableEnvironment,并加载各种配置信息(如数据库、日志配置等)。
处理配置文件的 @Value 注解绑定,激活与环境相关的配置类。

3. Spring Context 初始化(Application Context Initialization)

处理逻辑:
创建并初始化 Spring 容器(ApplicationContext),它是 Spring 容器的核心。
加载所有的 bean 定义,扫描并解析标注了 @Component、@Service、@Repository 等注解的类。
解析 @Configuration 配置类,并在其中注册 bean。
启动自动配置模块,通过 @EnableAutoConfiguration 注解触发自动化配置。

4. 自动配置与 Bean 定义加载(AutoConfiguration & Bean Definitions)

处理逻辑:
根据项目依赖,Spring Boot 会自动配置数据库、Web 服务器、消息队列等服务。
自动配置模块会扫描当前类路径中的类(例如数据库驱动、Web 框架等),并根据已加载的配置文件自动启用相关配置。
通过 @ConditionalOnClass、@ConditionalOnMissingBean 等注解判断是否加载某些自动配置类。

5. Bean 初始化(Bean Initialization)

处理逻辑:
所有的 Spring Bean 被实例化并注入到 Spring 容器中。
启动时,@PostConstruct 注解标注的初始化方法会被调用。
如果定义了 CommandLineRunner 或 ApplicationRunner,它们会在 Bean 初始化后被执行,通常用于进行初始化操作或处理启动时的特定任务。

6. Web 服务器初始化(Web Server Initialization)

处理逻辑:
如果是 Web 应用,Spring Boot 会自动嵌入一个 Web 服务器(如 Tomcat、Jetty 或 Undertow)。
它会启动内嵌的 Servlet 容器,并加载与 Web 相关的配置(如 DispatcherServlet、Filter、Listener 等)。
启动时,会初始化 Spring MVC,设置路由、控制器、视图解析器等。

7. 应用启动(Application Startup)

处理逻辑:
启动 Web 服务,如果是 Spring MVC 应用,它会初始化并映射所有控制器和路由。
对于非 Web 应用,Spring Boot 会执行 run() 方法中的最后操作,进行应用的启动和健康检查。
Spring Boot 会等待客户端的请求。

8. 关闭钩子与清理(Shutdown Hook & Cleanup)

处理逻辑:
Spring Boot 启动时会注册一个 JVM 关闭钩子,当程序退出时,钩子会触发进行资源的清理。
此时 Spring 容器会调用 @PreDestroy 注解的销毁方法,并销毁所有的 bean。

总结:

Spring Boot 启动过程是一个多阶段的初始化过程,从环境准备到 Web 服务器启动,最后到应用的运行和关闭。每个阶段都承担不同的任务,如加载配置、创建和初始化 Spring 容器、自动配置、初始化 Web 服务器等。

http://www.dtcms.com/a/418194.html

相关文章:

  • 儿童网站模板 html做百度快照要先有网站吗
  • Games101 第六章 Shading(着色)
  • 电子电气架构 --- 智能座舱域环境感知和人机交互系统
  • 数字营销网站主页优化制作网页动画的软件
  • CSS详篇
  • Memblock-3
  • 大数据毕业设计选题推荐-基于大数据的全国饮品门店数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • 【后端开发】golang部分中间件介绍(任务调度/服务治理/数据库/缓存/服务通信/流量治理)
  • 建设一个自己的网站需要多少钱站长统计官方网站
  • 烟台装修公司网站建设注册公司流程和费用时间
  • java设计模式:工厂方法 + 建造者模式
  • 3、Lombok进阶功能实战:Builder模式、异常处理与资源管理高级用法
  • Linux 内核开发 的核心知识点
  • 【Linux系列】并发世界的基石:透彻理解 Linux 进程 — 理解操作系统
  • 小米17对比iPhone 17:2025年深度对比
  • 借助Aspose.Email,使用 Python 将 EML 转换为 MHTML
  • 免费做名片的网站专业网站开发设计
  • 微服务项目->在线oj系统(Java-Spring)-后台管理(1)
  • 怎么防止网站攻击做网站价格表
  • 1、Product-Service 服务设计规范文档
  • 网深科技NetInside网络流量异常分析报告
  • 基于TCP的简易端口扫描器
  • 大腾智能助力深圳市联合创造科技,实现精密触控屏行业数字化升级
  • MR+无人机-增强态势感知、更高效的现场检查和增强
  • 无人机遥控器使用与信号连接问题处理
  • 德克西尔抗振倾角仪,守护无人机云台稳定清晰
  • Mosquitto:MQTT Broker入门与分布式部署最佳实践
  • 无人机姿态控制技术详解
  • 做网站所需要的公司细责及条款微信小程序推广
  • keepalived部署