0108 Spring Boot启动过程

news2024/9/29 13:45:13

Spring Boot 的启动过程可以分为以下几个关键步骤:

1. SpringApplication 初始化

Spring Boot 应用的启动是通过调用 SpringApplication.run() 方法完成的。在这个过程中,Spring Boot 会通过 SpringApplication 类对应用进行初始化,包括设置默认配置、准备环境、创建上下文等。

关键代码示例:

SpringApplication.run(Application.class, args);

run() 方法中,SpringApplication 对象会进行一系列的初始化工作:

  • 推断应用类型:根据项目是否包含 web 相关的依赖,Spring Boot 会自动推断应用是标准的 MVC 应用、Reactive Web 应用还是非 Web 应用。
  • 设置环境(Environment):Spring Boot 会根据操作系统、配置文件等信息,自动配置应用环境。
  • 加载 ApplicationContext:根据推断的应用类型加载相应的 ApplicationContext,比如 AnnotationConfigApplicationContextWebApplicationContext

2. 启动监听器和初始化器

SpringApplication 会在启动时触发 ApplicationListenerApplicationContextInitializer

  • ApplicationListener:在 SpringApplication 初始化的过程中,Spring Boot 会发布一系列事件(如环境准备、上下文准备、启动完成等),这些事件可以由 ApplicationListener 来监听和处理。
  • ApplicationContextInitializer:用于在 ApplicationContext 刷新之前对上下文进行自定义处理。

3. 准备环境

Spring Boot 使用 ConfigurableEnvironment 来抽象应用的环境。它包括了系统环境变量、Java 虚拟机参数、命令行参数等。

  • 加载外部配置文件(如 application.propertiesapplication.yml),并将其注入到 Spring 环境中。
  • 设置一些默认属性,比如端口号、编码格式等。

4. 创建并刷新 ApplicationContext

Spring Boot 根据应用类型创建相应的 ApplicationContext 实例,比如 AnnotationConfigServletWebServerApplicationContext(用于 Web 应用)。

  • Bean 加载:Spring Boot 会扫描应用上下文中的 Bean,并根据注解(如 @Component@Service 等)或 XML 配置来实例化和装配这些 Bean。
  • 自动配置:Spring Boot 提供了大量的自动配置(Auto Configuration),在上下文刷新时自动完成配置,如数据库连接、MVC 配置等。
  • 容器刷新:Spring 会在这个阶段完成对应用上下文的刷新操作,并初始化所有单例 Bean。

5. 启动内嵌的 Web 容器

如果是 Web 应用,Spring Boot 会自动启动嵌入式的 Web 容器,比如 Tomcat、Jetty 或 Undertow。

  • Spring Boot 会创建并初始化 ServletWebServerApplicationContext,然后启动内嵌的服务器,并将 Spring 的 DispatcherServlet 注册到服务器中。
  • Web 容器启动完成后,应用将开始监听 HTTP 请求。

6. 执行 CommandLineRunnerApplicationRunner

ApplicationContext 刷新并且所有 Bean 都初始化完成后,Spring Boot 会调用实现了 CommandLineRunnerApplicationRunner 接口的 Bean,允许开发者在应用启动时执行一些自定义逻辑。

@Component
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("Application started with arguments: " + Arrays.toString(args));
    }
}

7. 应用启动完成

Spring Boot 在完成所有初始化和配置后,会触发 ApplicationStartedEvent,并正式进入运行状态,开始接受请求或执行任务。

8.总结

Spring Boot 启动过程包含多个步骤,从初始化 SpringApplication 到创建和配置应用上下文,再到启动嵌入式 Web 容器和执行自定义逻辑,整个过程高度自动化且灵活,通过各种机制(如事件、监听器、自动配置)为开发者提供了简化的启动和配置体验。

欢迎关注笔者最新文章:
在这里插入图片描述

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

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

相关文章

ERP系统委外工单管理

1. 委外工单管理概念 1.1 定义与目的 委外工单管理是ERP系统中的一个关键组成部分,它涉及到将企业内部无法或不宜自行完成的生产任务,通过工单的形式委托给外部供应商进行加工、制造或服务的过程。委外工单管理的目的在于优化资源配置、降低生产成本、…

【Qt+Python项目构建】- 01-首次配置 Qt Creator 14.01 for Python

前言: 如何用QT实现Python的配置的交互界面。本文从0开始,进行实践的介绍。 在上一节里面,我们做了社区版本的配置: https://blog.csdn.net/yellow_hill/article/details/142597007?spm1001.2014.3001.5501 这一节&#xff0…

Android开发仿抖音底部加载进度条

Android开发仿抖音底部加载进度条 仿抖音底部加载进度条,从中间向两头伸的动画 一、思路: 自定义VideoLoadingBar控件 二、效果图: 三、关键代码: // 联系:893151960 public class VideoLoadingBar extends View …

阿布量化:基于 Python 的量化交易框架

阿布量化(AbuQuant) 是一个开源的量化交易框架,专为金融领域的研究者和交易者设计。它基于 Python 语言开发,提供了一整套从数据获取、策略开发、回测分析到交易执行的解决方案。阿布量化不仅能够帮助用户快速实现量化策略的设计与…

IDEA:Picked up _JAVA_OPTIONS: -Xmx512M

_JAVA_OPTIONS 是一个环境变量,它可以用来设置 Java 虚拟机的启动参数 如果要取消它在idea中显示,如图所示将其删除即可

C# 游戏引擎中的协程

前言 书接上回,我谈到了Unity中的协程的重要性,虽然协程不是游戏开发“必要的”,但是它可以在很多地方发挥优势。 为了在Godot找回熟悉的Unity协程开发手感,不得不自己做一个协程系统,幸运的是,有了Unity的…

MongoDB 工具包安装(mongodb-database-tools)

首先到官网下载工具包,进入下面页面,复制连接地址,使用wget下载 cd /usr/local/mongodb5.0.14/wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.6.1.tgz 安装 tar -zxvf mongodb-database-tools-rhel70-…

26个用好AI大模型的提示词技巧

如果你已深入探索过ChatGPT、Microsoft Copilot、风变AI等前沿的生成式AI工具,那么你对“prompt”(提示词)这一核心概念一定有自己的认知。 作为连接你与AI创意源泉的桥梁,“prompt”不仅是触发无限想象的钥匙,更是塑…

基于SSM的校园自助洗衣系统【附源码】

基于SSM的校园自助洗衣系统(源码L文说明文档) 目录 4 系统设计 4.1 设计原则 4.2 功能结构设计 4.3 数据库设计 4.3.1 数据库概念设计 4.3.2 数据库物理设计 第5章 系统实现 5.1 管理员功能实现 5.1.1 洗衣机管理…

远程服务器安装anaconda并创建虚拟环境

1、承接上文新用户zrcs,在服务器的zrcs文件夹下直接下载anaconda(很慢): wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh 或者选择本地下载,清华大学开源软件镜像站:https:/…

ACDsee简体中文版网盘资源下载(含教程)

如大家所熟悉的,ACDSee是一款集看图、编辑和管理于一体的软件,其凭借着打开速度快、管理功能强、操作界面友好简单等等优势,广受用户的喜欢。目前最新为ACDSee 2024版本。 一、文件管理 ACDSee数据库在文件管理方面表现出色。它可以帮助用户…

vscode编辑区看不清光标

打开 “控制面板”-“鼠标”-“指针”-“自定义”-“文本选择” 在浏览中选择“beam_r.cur”,打开后确认应用

GIS开发工程师岗位职责、技术要求和常见面试题

GIS 开发工程师负责运用地理信息系统专业知识和编程技能,进行 GIS 软件设计、开发、数据处理与管理,以实现高效的地理空间信息系统应用。 一、岗位职责 系统开发与设计 负责地理信息系统(GIS)相关软件的设计、开发、测试和维护工…

智能绘画,体现非凡想象力以文生图功能简单操作

智能绘画,体现非凡想象力以文生图功能简单操作 智能绘画技术突破了人类自身的极限,让绘画分析进入到一个更为广泛的视野中。通过输入描述性的文字,便可生成便可生成同一主题、不同风格的画作,体现出非凡的想象力,象征未…

【网络安全 白帽子】用技术合法挖漏洞,一个月能拿多少钱

现在很多白帽子(网安工程师/渗透测试工程师)都会在下班之后利用业余时间去补天之类的漏洞赏金平台挖漏洞,用技术合法给企业找出威胁存在,拿到漏洞赏金。 那么现在,一般人用网安技术挖漏洞一个月能拿多少钱&#xff1f…

【Mybatis Plus】分页插件

1.配置分页插件 Configuration public class MyBatisConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();//1.创建分页插件PaginationInnerInterceptor paginationInnerInterceptor new…

Unity实战案例全解析:RTS游戏的框选和阵型功能(2) 生成选择框

前篇:Unity实战案例全解析:RTS游戏的框选和阵型功能(1) 基础要素-CSDN博客 本案例来源于unity唐老狮,有兴趣的小伙伴可以去泰克在线观看该课程 【唐老狮】Unity实现 即时战略游戏 阵型功能 - 泰课在线 -- 志存高远&…

深刻理解Redis集群(上):RDB快照和AOF日志

RDB快照 save同步阻塞 客户端 服务端 .conf配置文件 # The filename where to dump the DB dbfilename dump.rdb# rdb-del-sync-files是Redis配置文件中的一个选项,它的作用是在主节点上执行BGSAVE或AOF持久化操作时,删除同步锁文件,以释放磁…

结婚证识别-离婚证识别接口-结婚证识别API应用场景

在信息化与智能化高速发展的今天,证件的自动识别技术逐渐成为了各行各业数字化转型的关键工具,而结婚证识别接口、离婚证识别接口正在悄然改变着传统的民政工作方式。 结婚证识别与离婚证识别接口是基于光学字符识别(OCR)技术的智…

LLM - 使用 RAG (检索增强生成) 多路召回 实现 精准知识问答 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142629289 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 RAG (R…