springboot与tomcat的启动(内嵌tomcat)

author author     2023-03-21     685

关键词:

参考技术A 环境:
SpringBoot 2.0.1

使用SpringBoot开发时,可以通过Maven将工程打成jar包,jar包内嵌Tomcat,这种方式SpringBoot工程将在启动的时候,带动Tomcat的启动,下面分析SpringBoot如何带动Tomcat启动

一个简单的SpringBoot工程启动类

跟进 SpringApplication#run 方法

如果对Spring的启动流程有了解的话,应该知道Spring启动过程中,最重要的就是 AbstractApplicationContext#refresh() 过程,在这个方法中Spring执行了BeanFactory的初始化,Bean的实例化、属性填充、初始化操作等等重要的操作,该方法主要逻辑如下:

仔细观察这个方法,可以发现其中调用了几个空方法,这里应用了 模板模式 ,在 refresh 方法中定义了主干执行流程,并留有空的方法给子类做个性化定制

现在开始,通过debug来看看SpringBoot如何启动Tomcat容器

前面构造 SpringApplicaton 时,已经推断出当前Web工程类型,当开始执行 #run 方法时,会根据不同类型的Web项目创建不同类型的ApplicationContext

创建好 ApplicationContext 之后,看到 refreshContext(context) ,联系本文开头Spring启动的 AbstractApplicationContext#refresh 方法,该方法其实就是触发了后者的执行

执行 refreshContext 方法,来到前面根据 webApplicationType 创建的容器类 ServletWebServerApplicationContext

进入到 TomcatServletWebServerFactory ,可以看到如下启动内置Tomcat的过程

至此,Tomcat继承Spring的 AbstractApplicationContext 类,覆盖它的模板方法 onRefresh ,SpringBoot在自身启动的过程中,启动了内置的Tomcat服务器

springboot系列之tomcat内嵌web容器是如何启动的

前言如果看过我前几篇介绍Springboot是如何启动的文章,那内嵌的tomcat是如何启动的这个问题其实很好回答,这里我总结了一张时序图,感觉一图胜千言,分享给大家 查看详情

springboot如何使用内嵌式的tomcat和jetty?(代码片段)

为了方便开发和部署,SpringBoot在内部启动了一个嵌入式的Web容器。我们知道Tomcat和Jetty是组件化的设计,要启动Tomcat或者Jetty其实就是启动这些组件。在Tomcat独立部署的模式下,我们通过startup脚本来启动Tomcat,Tomcat中的Bootstrap和... 查看详情

springboot内嵌tomcat原理(代码片段)

文章目录1ServletWebServerFactoryConfiguration2onRefresh启动web服务2.1createWebServer创建web服务2.1.1getWebServerFactory获取web服务工厂2.1.2getWebServer获取web服务本次的spring-boot-starter-parent版本为2.3.0。之前分析了Springboot的启动源码的大 查看详情

spring-boot需要启动nginx吗

在开发SpringBoot应用的过程中,SpringBoot直接执行publicstaticvoidmain()函数并启动一个内嵌的应用服务器(取决于类路径上的以来是Tomcat还是jetty)来处理应用请求。对于生产环境,这样的部署方式同样有效,同时SpringBoot也支持传统的... 查看详情

day695.springboot如何使用内嵌式的tomcat和jetty-深入拆解tomcat&jetty(代码片段)

SpringBoot如何使用内嵌式的Tomcat和JettyHi,我是阿昌,今天学习记录的是关于SpringBoot如何使用内嵌式的Tomcat和Jetty的内容。为了方便开发和部署,SpringBoot在内部启动了一个嵌入式的Web容器。我们知道Tomcat和Jetty是组件化... 查看详情

springboot去除内嵌tomcat和打包在tomcat中运行需要做的步骤

去除内嵌tomcat和添加jsp依赖 去除内嵌tomcat 在springboot启动依赖中去除内嵌tomcat <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId&g 查看详情

springboot内嵌容器undertow取代tomcat

...的情况,可以适当的加大workerThreads线程配置。后续之《SpringBoot服务器压测对比(jetty、tomcat、undertow)》undertow在github的源码SpringBoot内嵌容器Undertow参数设置Springboot中Undertow配置线程数线程数设多少合适??Docker环境SpringBoot应用... 查看详情

springboot学习笔记内嵌tomcat和springmvc(代码片段)

springBoot学习笔记(五)内嵌tomcat和springmvc源码剖析内嵌tomcattomcat自动配置类ServletWebServerFactoryAutoConfigurationSpringBoot启动内置tomcat流程getWebServer方法的调用springmvc自动配置(一)自动配置DispatcherServlet和DispatcherServlet... 查看详情

spring-boot需要启动nginx吗

参考技术A在开发SpringBoot应用的过程中,SpringBoot直接执行publicstaticvoidmain()函数并启动一个内嵌的应用服务器(取决于类路径上的以来是Tomcat还是jetty)来处理应用请求。对于生产环境,这样的部署方式同样有效,同时SpringBoot也... 查看详情

springboot启动加载tomcat原理深度剖析(代码片段)

1.前言    springboot打包成fatjar的形式启动时,这时tomcat作为内嵌容器,由springboot带动起来,并注册servlet/filter等,这个过程是如何实现的呢?本文将从源码级别带你探索springboot带起tomcat的实现原理。    以... 查看详情

springboot内嵌tomcat开启apr模式,提升并发

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受。目录一、简介二、模式介绍1.BIO模式2.NIO模式3.APR模式三、安装开启辅助软件 1.安装apr2.安装apr-utils3.安装tomcat-native4.修... 查看详情

springboot内嵌tomcat开启apr模式,提升并发

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受。目录一、简介二、模式介绍1.BIO模式2.NIO模式3.APR模式三、安装开启辅助软件 1.安装apr2.安装apr-utils3.安装tomcat-native4.修... 查看详情

springboot的应用启动与关闭

参考技术ASpringBoot应用可以打成jar包,其中内嵌tomcat,因此可以直接启动使用。但是在SpringBoot应用启动之前,首先需要进行打包,本文讲述的是Maven工程的打包,打包需要的前提条件(pom.xml文件中的内容)是:打包命令为:或在ecli... 查看详情

springboot源码学习系列之嵌入式servlet容器

1、前言简单介绍SpringBoot的自动配置就是SpringBoot的精髓所在;对于SpringBoot项目是不需要配置Tomcat、jetty等等Servlet容器,直接启动application类既可,SpringBoot为什么能做到这么简捷?原因就是使用了内嵌的Servlet容器,默认是使用Tomc... 查看详情

springboot源码学习系列之嵌入式servlet容器

1、前言简单介绍SpringBoot的自动配置就是SpringBoot的精髓所在;对于SpringBoot项目是不需要配置Tomcat、jetty等等Servlet容器,直接启动application类既可,SpringBoot为什么能做到这么简捷?原因就是使用了内嵌的Servlet容器,默认是使用Tomc... 查看详情

springboot启动加载tomcat原理深度剖析(代码片段)

1.前言    springboot打包成fatjar的形式启动时,这时tomcat作为内嵌容器,由springboot带动起来,并注册servlet/filter等,这个过程是如何实现的呢?本文将从源码级别带你探索springboot带起tomcat的实现原理。    以... 查看详情

求助,spring-boot升级带来的异常

参考技术A在开发SpringBoot应用的过程中,SpringBoot直接执行publicstaticvoidmain()函数并启动一个内嵌的应用服务器(取决于类路径上的以来是Tomcat还是jetty)来处理应用请求。对于生产环境,这样的部署方式同样有效,同时SpringBoot也... 查看详情

3springboot与微服务

SpringBoot的使用?化繁为简:SpringMVC需要定义各种配置,配置文件多。SpringBoot的核心功能?  独立运行:java-jarXXX.jar(以前启动SPringMVC需要有服务器,比如tomcat)  内嵌web服务器:内嵌Tomcat.  简化配置:用starter简化Maven的配置Sp... 查看详情