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));
		}
	}
    
相关推荐
程序员侠客行15 小时前
Tomcat 从陌生到熟悉
java·tomcat·web
庞轩px17 小时前
模拟面试回答第十四问:双亲委派模型
jvm·面试·职场和发展·tomcat·类加载·类加载器·双亲委派模型
程序员侠客行21 小时前
Tomcat 网络I/O模型浅析
java·tomcat·web
難釋懷21 小时前
OpenResty查询Tomcat
tomcat·firefox·openresty
冷血~多好21 小时前
mysql实现主从复制以及springboot实现读写分离
java·数据库·mysql·springboot
cngm1101 天前
解决麒麟v10下tomcat无法自动启动的问题
java·tomcat
侠客行03172 天前
Tomcat 网络I/O模型浅析
java·tomcat·源码阅读
侠客行03172 天前
Tomcat 从陌生到熟悉
java·tomcat·源码阅读
gududexiao2 天前
linux 设置tomcat开机启动
linux·运维·tomcat
hzb666663 天前
xd_day32-day40
java·javascript·学习·安全·web安全·tomcat·php