springboot内置Tomcat流程

1、org.springframework.boot.SpringApplication#initialize

java 复制代码
setInitializers((Collection) getSpringFactoriesInstances(
				ApplicationContextInitializer.class));

加载了org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext

2、spring refresh 中onRefresh回调中启动了内置Tomcat

ServletWebServerApplicationContext继承AbstractApplicationContext,并且重新实现了onRefresh方法。

java 复制代码
	//重写了refresh方法,启动
    @Override
	protected void onRefresh() {
		super.onRefresh();
		try {
			createWebServer();
		}
		catch (Throwable ex) {
			throw new ApplicationContextException("Unable to start web server", ex);
		}
	}

    //启动Tomcat
	private void createWebServer() {
		WebServer webServer = this.webServer;
		ServletContext servletContext = getServletContext();
		if (webServer == null && servletContext == null) {
			ServletWebServerFactory factory = getWebServerFactory();
			this.webServer = factory.getWebServer(getSelfInitializer());
		}
		else if (servletContext != null) {
			try {
				getSelfInitializer().onStartup(servletContext);
			}
			catch (ServletException ex) {
				throw new ApplicationContextException("Cannot initialize servlet context", ex);
			}
		}
		initPropertySources();
	}

    //如果Tomcat启动了,就发布服务ServletWebServerInitializedEvent
	@Override
	protected void finishRefresh() {
		super.finishRefresh();
		WebServer webServer = startWebServer();
		if (webServer != null) {
			publishEvent(new ServletWebServerInitializedEvent(webServer, this));
		}
	}
    
相关推荐
晚安~~8 小时前
考研互学互助系统|Java|SSM|VUE| 前后端分离
java·开发语言·tomcat·maven
zfj3219 小时前
学技术学英文:Tomcat的线程模型&调优
java·tomcat·maxconnections·acceptcount·maxthreads·minsparethreads
雪芽蓝域zzs14 小时前
JavaWeb开发(四)HttpServletRequest
tomcat·intellij-idea
计算机_CodeMind15 小时前
基于微信小程序的校园点餐平台的设计与实现(源码+SQL+LW+部署讲解)
开发语言·微信小程序·springboot·课程设计
计算机学姐17 小时前
基于SpringBoot+Vue的旅游推荐系统
java·vue.js·spring boot·后端·mysql·tomcat·旅游
全栈老实人_1 天前
旅游管理系统|Java|SSM|VUE| 前后端分离
java·开发语言·tomcat·maven
程序猿进阶2 天前
K 个一组翻转链表(链表反转,固定长度反转)
java·开发语言·数据结构·后端·spring·链表·springboot
互联网动态分析2 天前
Tomcat:开源Web服务器的中流砥柱
tomcat
陶然同学2 天前
【学生管理系统】整合JWT(完)
java·javascript·springboot·nuxt
LiJonny3 天前
如何使用 JPA 实现分页查询并返回 VO 对象
springboot·hibernate·jpa·分页·vo