文章目录
- 概要
- 整体架构流程
- 技术细节
概要
Springboot 内嵌 tomcat是如何启动的 ?
整体架构流程
springboot启动 ---- autoconfiguration ---- tomcat
springboot在启动后,通过context 确定是 org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext
然后在 refresh 过程中,执行 onRefresh()
并在此过程创建 webserver
webServer 通过 WebServerFactory 获取,而这个工厂是从 springboot 的包里获取的。
在初始化里
技术细节
提示:打个断点看看tomcat是如何初始化的
我们可以看到嵌入web容器的类是从springboot的包里开始的,springboot支持4中内嵌容器:
在这里的 Tomcat 服务器建立完毕
@Override
public WebServer getWebServer(ServletContextInitializer... initializers) {
if (this.disableMBeanRegistry) {
Registry.disableRegistry();
}
// 初始化 tomcat
Tomcat tomcat = new Tomcat();
File baseDir = (this.baseDirectory != null) ? this.baseDirectory : createTempDir("tomcat");
tomcat.setBaseDir(baseDir.getAbsolutePath());
for (LifecycleListener listener : this.serverLifecycleListeners) {
tomcat.getServer().addLifecycleListener(listener);
}
Connector connector = new Connector(this.protocol);
connector.setThrowOnFailure(true);
tomcat.getService().addConnector(connector);
customizeConnector(connector);
tomcat.setConnector(connector);
tomcat.getHost().setAutoDeploy(false);
configureEngine(tomcat.getEngine());
for (Connector additionalConnector : this.additionalTomcatConnectors) {
tomcat.getService().addConnector(additionalConnector);
}
prepareContext(tomcat.getHost(), initializers);
return getTomcatWebServer(tomcat);
}