SpringBoot内置Tomcat启动原理
文章目录
- 概要
- 整体架构流程
- 技术细节
概要
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 服务器建立完毕
@Overridepublic WebServer getWebServer(ServletContextInitializer... initializers) {if (this.disableMBeanRegistry) {Registry.disableRegistry();}// 初始化 tomcatTomcat 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);}