当前位置: 首页 > news >正文

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);}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 装饰大师——装饰模式(Python实现)
  • UE5 UE4 使用python进行编辑器操作
  • 028-GeoGebra中级篇-脚本的初步的探索
  • python爬虫【3】—— 爬虫反反爬
  • 基于springboot的大学奖学金评定管理系统表结构调试讲解源码
  • 【vueUse库Utilities模块各函数简介及使用方法--第5篇】
  • C# timer.start()和timer1.Enabled=false;的区别
  • .Net Core中Quartz的使用方法
  • 2024年最强网络安全学习路线,详细到直接上清华的教材!
  • 正则采集器之二——后台搭建
  • 前后端分离开发遵循接口规范-YAPI
  • 如何使用 Puppeteer 绕过 Akamai
  • Java导出Excel给每一列设置不同样式示例
  • 谷粒商城实战笔记-64-商品服务-API-品牌管理-OSS前后联调测试上传
  • 【BSV生态亮点】体育进入区块链时代:波兰奥委会与Zetly建立战略伙伴关系
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • SegmentFault for Android 3.0 发布
  • 【Amaple教程】5. 插件
  • 【刷算法】求1+2+3+...+n
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Codepen 每日精选(2018-3-25)
  • cookie和session
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java 多线程编程之:notify 和 wait 用法
  • Linux后台研发超实用命令总结
  • opencv python Meanshift 和 Camshift
  • windows-nginx-https-本地配置
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 从tcpdump抓包看TCP/IP协议
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深入浅出Node.js
  • 使用 Docker 部署 Spring Boot项目
  • 小程序开发中的那些坑
  • 学习使用ExpressJS 4.0中的新Router
  • 赢得Docker挑战最佳实践
  • 源码安装memcached和php memcache扩展
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​ubuntu下安装kvm虚拟机
  • ​虚拟化系列介绍(十)
  • ### RabbitMQ五种工作模式:
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $$$$GB2312-80区位编码表$$$$
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2)Java 简介
  • (4) PIVOT 和 UPIVOT 的使用
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (二)正点原子I.MX6ULL u-boot移植
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (生成器)yield与(迭代器)generator
  • (算法)求1到1亿间的质数或素数
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解