Springboot3.3.5 启动流程之 tomcat启动流程介绍

在文章 Springboot3.3.5 启动流程(源码分析) 中讲到 应用上下文(applicationContext)刷新(refresh)时使用模板方法 onRefresh 创建了 Web Server.

本文将详细介绍 ServletWebServer --- Embedded tomcat 的启动流程。

首先,通过 ServletWebServerApplicationContext 的方法 getWebServerFactory 获取当前配置的唯一的 ServletWebServerFactory(它的实现有三个:JettyServletWebServerFactoryTomcatServletWebServerFactoryUndertowServletWebServerFactory), 本示例中是 TomcatServletWebServerFactory

第二步,直接通过 TomcatServletWebServerFactory 的方法获取 getWebServer 启动好的 tomcat 。
getWebServer方法中首先创建 一个 tomcat, 剩下的就是对tomcat 的配置。

prepareContext

prepareContext 的核心功能就是配置 TomcatEmbeddedContextTomcatEmbeddedContext 通过 Host 和 tomcat 建立关系:

prepareContext 函数关键代码:

java 复制代码
protected void prepareContext(Host host, ServletContextInitializer[] initializers) {
		File documentRoot = getValidDocumentRoot();
		TomcatEmbeddedContext context = new TomcatEmbeddedContext();
		...
		context.addLifecycleListener(new FixContextListener());
		...
		WebappLoader loader = new WebappLoader();
		loader.setLoaderInstance(new TomcatEmbeddedWebappClassLoader(parentClassLoader));
		...
		if (isRegisterDefaultServlet()) {
			addDefaultServlet(context);
		}
		if (shouldRegisterJspServlet()) {
			addJspServlet(context);
			addJasperInitializer(context);
		}
		context.addLifecycleListener(new StaticResourceConfigurer(context));
		host.addChild(context);
		configureContext(context, initializersToUse);
		postProcessContext(context);
	}
getTomcatWebServer

方法 getTomcatWebServer 中启动了 tomcat:


start 方法执行完后, tomcat 就启动好(此时不接收用户请求)。

最后,整理一份 Spring boot 内嵌(embedded )tomcat 启动主要流程图(不可深究 😊 ):

Springboot 内嵌(embedded )tomcat 启动流程到此就介绍完了, 希望对各位小伙伴有所帮助。

相关推荐
还是鼠鼠33 分钟前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
Xiaokai丶1 小时前
Java 8 新特性深度剖析:核心要点与代码实战
java
灵魂猎手1 小时前
3. MyBatis Executor:SQL 执行的核心引擎
java·后端·源码
Galaxy在掘金1 小时前
从业8年,谈谈我认知的后端架构之路-1
java·架构
努力努力再努力wz2 小时前
【c++深入系列】:万字详解模版(下)
java·c++·redis
瓦特what?3 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘
是乐谷3 小时前
阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)
java·人工智能·阿里云·面试·职场和发展·机器人·云计算
Java水解4 小时前
Java中的四种引用类型详解:强引用、软引用、弱引用和虚引用
java·后端
lifallen4 小时前
JCTools 无锁并发队列基础:ConcurrentCircularArrayQueue
java·开发语言·数据结构·算法
一叶飘零_sweeeet4 小时前
IDEA 插件 Trae AI 全攻略
java·人工智能·intellij-idea