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 启动流程到此就介绍完了, 希望对各位小伙伴有所帮助。

相关推荐
长河1 天前
基于 Jib 实现无 Dockerfile 的 Spring Boot 应用容器化
java·spring boot·后端
Maiko Star1 天前
Spring AI ChatClient 完全指南:从基础配置到流式调用
java·人工智能·spring
l1t1 天前
类似 X-13ARIMA-SEATS 功能的 JDemetra+ 安装和使用
java·数据库·r语言
架构源启1 天前
2026 进阶篇:深入理解Spring Reactor响应式编程的核心引擎(源码级解析+实战避坑)
java·后端·spring
薪火铺子1 天前
SpringMVC请求处理流程源码解析(第2篇):处理器执行与参数绑定
java·后端·spring
SamDeepThinking1 天前
一个跑了三年没出过问题的系统,我是怎么设计的
java·后端·架构
逸Y 仙X1 天前
文章十七:ElasticSearch get\search查询相关参数
java·大数据·elasticsearch·搜索引擎·全文检索
leonidZhao1 天前
Java25新特性:JFR CPU时间性能分析
java
Arya_aa1 天前
一:病虫害 AI 识别系统项目初期准备与Docker初识,VM虚拟机
spring boot
千码君20161 天前
flutter: 分享一下基于trae cn 构建的过程
java·vscode·flutter·kotlin·trae