SpringBoot复习:(2)Tomcat容器是怎么启动的?

这篇具有很好参考价值的文章主要介绍了SpringBoot复习:(2)Tomcat容器是怎么启动的?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringApplication的run方法包含如下代码:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
其中调用的refreshContext代码如下:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
其中调用的refresh方法片段如下:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
其中调用的refresh方法代码如下:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
其中调用的super.refresh方法代码如下:

	public void refresh() throws BeansException, IllegalStateException {
		synchronized (this.startupShutdownMonitor) {
			StartupStep contextRefresh = this.applicationStartup.start("spring.context.refresh");

			// Prepare this context for refreshing.
			prepareRefresh();

			// Tell the subclass to refresh the internal bean factory.
			ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

			// Prepare the bean factory for use in this context.
			prepareBeanFactory(beanFactory);

			try {
				// Allows post-processing of the bean factory in context subclasses.
				postProcessBeanFactory(beanFactory);

				StartupStep beanPostProcess = this.applicationStartup.start("spring.context.beans.post-process");
				// Invoke factory processors registered as beans in the context.
				invokeBeanFactoryPostProcessors(beanFactory);

				// Register bean processors that intercept bean creation.
				registerBeanPostProcessors(beanFactory);
				beanPostProcess.end();

				// Initialize message source for this context.
				initMessageSource();

				// Initialize event multicaster for this context.
				initApplicationEventMulticaster();

				// Initialize other special beans in specific context subclasses.
				onRefresh();

				// Check for listener beans and register them.
				registerListeners();

				// Instantiate all remaining (non-lazy-init) singletons.
				finishBeanFactoryInitialization(beanFactory);

				// Last step: publish corresponding event.
				finishRefresh();
			}

			catch (BeansException ex) {
				if (logger.isWarnEnabled()) {
					logger.warn("Exception encountered during context initialization - " +
							"cancelling refresh attempt: " + ex);
				}

				// Destroy already created singletons to avoid dangling resources.
				destroyBeans();

				// Reset 'active' flag.
				cancelRefresh(ex);

				// Propagate exception to caller.
				throw ex;
			}

			finally {
				// Reset common introspection caches in Spring's core, since we
				// might not ever need metadata for singleton beans anymore...
				resetCommonCaches();
				contextRefresh.end();
			}
		}
	}

其中调用了onRefresh方法:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
进入

ServletWebServerApplicationContext的onRefresh方法:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
createWebServer代码如下:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
其中调用的TomcatServletWebServerFactory的getWebServer代码如下:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
其中调用的getTomcatWebServer的代码如下:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
其中调用的构造方法如下:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端
其中调用的initialize方法代码如下:

	private void initialize() throws WebServerException {
		logger.info("Tomcat initialized with port(s): " + getPortsDescription(false));
		synchronized (this.monitor) {
			try {
				addInstanceIdToEngineName();

				Context context = findContext();
				context.addLifecycleListener((event) -> {
					if (context.equals(event.getSource()) && Lifecycle.START_EVENT.equals(event.getType())) {
						// Remove service connectors so that protocol binding doesn't
						// happen when the service is started.
						removeServiceConnectors();
					}
				});

				// Start the server to trigger initialization listeners
				this.tomcat.start();

				// We can re-throw failure exception directly in the main thread
				rethrowDeferredStartupExceptions();

				try {
					ContextBindings.bindClassLoader(context, context.getNamingToken(), getClass().getClassLoader());
				}
				catch (NamingException ex) {
					// Naming is not enabled. Continue
				}

				// Unlike Jetty, all Tomcat threads are daemon threads. We create a
				// blocking non-daemon to stop immediate shutdown
				startDaemonAwaitThread();
			}
			catch (Exception ex) {
				stopSilently();
				destroySilently();
				throw new WebServerException("Unable to start embedded Tomcat", ex);
			}
		}
	}

其中可以看到启动tomcat的代码:
SpringBoot复习:(2)Tomcat容器是怎么启动的?,SpringBoot,spring boot,tomcat,后端文章来源地址https://www.toymoban.com/news/detail-607553.html

到了这里,关于SpringBoot复习:(2)Tomcat容器是怎么启动的?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring ico容器 spring注入方式 spring与tomcat整合

    目录 一、简介 1、什么是spring? 2、目的 3、功能及使用范围 二、spring IOC 1、ioc的理解 2、开发人员可达到的目的 3、分析实现 4、bean配置 三、spring IOC的注入方式 1、set方法属性注入 2、构造注入 3、自动装配 四、spring与tomcat的整合/spring与web容器的整合 五、spring AOP 1、aop的特

    2024年02月12日
    浏览(46)
  • SpringBoot内嵌Tomcat启动流程

    Spring MVC 让开发者不用了解 Servlet 细节,专注于 Controller 编写 API 接口。Spring Boot 更是采用约定大于配置的设计思想,通过内嵌 Tomcat 的方式让开发者可以快速构建并部署一个 Web 应用。怎么做到的呢? 早期的开发,一般是基于 Spring 和 Spring MVC 构建我们的应用,然后把项目打

    2024年02月02日
    浏览(43)
  • 【SpringBoot】88、SpringBoot中使用Undertow替代Tomcat容器

    SpringBoot 中我们既可以使用 Tomcat 作为 Http 服务,也可以用 Undertow 来代替。Undertow 在高并发业务场景中,性能优于 Tomcat。所以,如果我们的系统是高并发请求,不妨使用一下 Undertow,你会发现你的系统性能会得到很大的提升。 1、Tomcat 介绍 Tomcat是一个开源的Java Servlet容器,它

    2024年02月13日
    浏览(42)
  • SpringBoot 之 Tomcat 与 Undertow 容器性能对比

    环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE         在上一篇《SpringBoot 之配置 Undertow 容器》一文中写道:“Undertow 的性能和内存使用方面都要优于 Tomcat 容器”, 这一期,我就要给大家来求证一波,口说无凭,那我就拿当前的 Web 项目来做为测试项目,监控

    2024年02月06日
    浏览(38)
  • 【JAVA面试】SpringBoot如何启动的Tomcat

    提示:文章先作为初版,等后续时间充足后,补充更深的内容 在Spring Boot应用程序中, 内嵌的Tomcat服务器是通过Spring Boot Starter Web模块提供的功能 来启动的。下面是Spring Boot启动Tomcat的大致过程: 引入Spring Boot Starter Web依赖:在项目的pom.xml文件中添加 Spring Boot Starter Web依赖

    2024年02月04日
    浏览(49)
  • spring boot--自动化注入组件原理、内嵌tomcat-1

    前言 我们知道开发spring boot项目,在启动类上添加注解@SpringBootApplication ,然后引入要自动注入的组件依赖,然后现application.properties中加上相应配置就可以自动注入这个组件,那么下面看看自动注入组件是如何实现的 一、@SpringBootApplication 注解 1、查看SpringBootApplication 类如下

    2024年02月15日
    浏览(40)
  • SpringBoot配置外部Tomcat项目启动流程源码分析

    SpringBoot应用默认以Jar包方式并且使用内置Servlet容器(默认Tomcat),该种方式虽然简单但是默认不支持JSP并且优化容器比较复杂。故而我们可以使用习惯的外置Tomcat方式并将项目打War包。 ① 同样使用Spring Initializer方式创建项目 ② 打包方式选择\\\"war\\\" ③ 选择添加的模块 ④ 创建的

    2024年02月04日
    浏览(42)
  • SpringBoot源码学习4——SpringBoot内嵌Tomcat启动流程源码分析

    系列文章目录和关于我 我在初学spring的时候,很懵逼,因为整个项目中不存在main方法,让我有点摸不着头脑。那时候我知道有个东西叫tomcat是它监听了端口,解析了协议调到了我的servlet。 在我初学SpringBoot的时候,很懵逼,有main方法了,但是tomcat在哪里呢,又是如何启动起

    2024年02月04日
    浏览(47)
  • Spring Boot打war包部署到Tomcat,访问页面404 !!!

    水善利万物而不争,处众人之所恶,故几于道💦 Spring Boot打war包部署到Tomcat,访问页面404 !!! 解决办法:检查Tomcat版本和Jdk的对应关系,我的Tomcat是6.x,jdk是8版本显然不兼容。所以访问不到。更换9版本后,正常访问 tomcat官网对版本的介绍 注意:部署到外部tomcat的时候,

    2024年02月19日
    浏览(42)
  • SpringBoot源码分析之Tomcat是如何在SpringBoot中启动的?

    一.前言 我们知道SpringBoot可以直接把传统的war包打成可执行的jar包,直接启动。这得益于SpringBoot内置了容器可以直接启动。本文将以 Tomcat 为例,来看看 SpringBoot 是如何启动 Tomcat 的。 一.SpringApplication初始化 调用到最终的run方法我们来看一下 这里面首先创建了一个SpringAppl

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包