日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Spring Boot 內嵌 Web 容器啟動原理,驚爆你的眼球!

來源: 責編: 時間:2024-05-17 17:46:49 248觀看
導讀一、spring boot內嵌web容器介紹Spring Boot 支持以下內嵌的 Web 容器:Tomcat:Spring Boot 默認使用的 Web 容器,也是最常用的選擇。Tomcat 是一個流行的開源 Servlet 容器,具有廣泛的應用和良好的性能。Jetty:另一個常用

一、spring boot內嵌web容器介紹

Spring Boot 支持以下內嵌的 Web 容器:SFw28資訊網——每日最新資訊28at.com

  1. Tomcat:Spring Boot 默認使用的 Web 容器,也是最常用的選擇。Tomcat 是一個流行的開源 Servlet 容器,具有廣泛的應用和良好的性能。
  2. Jetty:另一個常用的 Web 容器,它具有輕量級和高效的特點。Spring Boot 也提供了對 Jetty 的支持。
  3. Undertow:一個高性能的 Web 容器,特別適合處理高并發和大規模的應用。Spring Boot 也可以與 Undertow 集成。

這些內嵌的 Web 容器都可以在 Spring Boot 應用中直接使用,無需額外的安裝和配置。Spring Boot 會自動根據項目的依賴和配置來選擇合適的 Web 容器,并進行相應的配置和啟動。SFw28資訊網——每日最新資訊28at.com

你可以根據項目的需求和特點選擇適合的 Web 容器。例如,如果對性能有較高要求,可以考慮使用 Undertow;如果需要與現有 Tomcat 環境集成,則可以選擇 Tomcat。SFw28資訊網——每日最新資訊28at.com

二、如何切換spring boot內嵌web容器

以jetty為例,我們只需要將默認的tomcat依賴排除,并將jetty依賴引入,即可完成內嵌web容器的切換。SFw28資訊網——每日最新資訊28at.com

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId>    <!--1、移除tomcat依賴(exclusions:排除)-->    <exclusions>        <exclusion>            <artifactId>spring-boot-starter-tomcat</artifactId>            <groupId>org.springframework.boot</groupId>        </exclusion>    </exclusions></dependency><!--2、加入jetty依賴--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-jetty</artifactId></dependency>

啟動項目,我們可以看到,jetty確實啟動了。SFw28資訊網——每日最新資訊28at.com

SFw28資訊網——每日最新資訊28at.com

SFw28資訊網——每日最新資訊28at.com

三、spring boot內嵌web容器啟動原理

Spring Boot 內嵌 Web 容器的啟動原理可以概括為以下幾個步驟:SFw28資訊網——每日最新資訊28at.com

  1. 依賴注入:Spring Boot 在啟動時,會自動掃描項目中的依賴,并將相關的 Web 容器依賴注入到應用程序中。
  2. 容器初始化:Spring Boot 會根據配置文件或默認設置,初始化所選的內嵌 Web 容器。這包括創建容器實例、設置端口號、上下文路徑等。
  3. 組件掃描和注冊:Spring Boot 會掃描項目中的組件(如控制器、服務等),并將它們注冊到 Web 容器中,以便處理 HTTP 請求。
  4. 配置加載:Spring Boot 會加載應用程序的配置信息,包括端口號、上下文路徑、靜態資源路徑等,并將這些配置應用到 Web 容器中。
  5. 啟動容器:一旦容器初始化完成并配置好,Spring Boot 會啟動內嵌的 Web 容器,使其開始監聽指定的端口,并準備處理 HTTP 請求。
  6. 應用程序運行:此時,應用程序已經在所選的內嵌 Web 容器中運行,可以通過訪問指定的端口來訪問應用程序的功能。

相關源碼如下:SFw28資訊網——每日最新資訊28at.com

SpringApplication類createApplicationContext方法,根據當前web應用的類型選擇匹配的應用上下文類型,這邊會創建AnnotationConfigServletWebServerApplicationContext。SFw28資訊網——每日最新資訊28at.com

protected ConfigurableApplicationContext createApplicationContext() {		Class<?> contextClass = this.applicationContextClass;		if (contextClass == null) {			try {				switch (this.webApplicationType) {				case SERVLET:					contextClass = Class.forName(DEFAULT_SERVLET_WEB_CONTEXT_CLASS);					break;				case REACTIVE:					contextClass = Class.forName(DEFAULT_REACTIVE_WEB_CONTEXT_CLASS);					break;				default:					contextClass = Class.forName(DEFAULT_CONTEXT_CLASS);				}			}			catch (ClassNotFoundException ex) {				throw new IllegalStateException(						"Unable create a default ApplicationContext, please specify an ApplicationContextClass", ex);			}		}		return (ConfigurableApplicationContext) BeanUtils.instantiateClass(contextClass);	}

AnnotationConfigServletWebServerApplicationContext類createWebServer方法,會創建我們配置的web容器。SFw28資訊網——每日最新資訊28at.com

private void createWebServer() {		WebServer webServer = this.webServer;		ServletContext servletContext = getServletContext();		if (webServer == null && servletContext == null) {			ServletWebServerFactory factory = getWebServerFactory();			this.webServer = factory.getWebServer(getSelfInitializer());			getBeanFactory().registerSingleton("webServerGracefulShutdown",					new WebServerGracefulShutdownLifecycle(this.webServer));			getBeanFactory().registerSingleton("webServerStartStop",					new WebServerStartStopLifecycle(this, this.webServer));		}		else if (servletContext != null) {			try {				getSelfInitializer().onStartup(servletContext);			}			catch (ServletException ex) {				throw new ApplicationContextException("Cannot initialize servlet context", ex);			}		}		initPropertySources();	}

這邊使用了工廠模式,不同的web容器有自己的工廠。SFw28資訊網——每日最新資訊28at.com

SFw28資訊網——每日最新資訊28at.com

SFw28資訊網——每日最新資訊28at.com

SFw28資訊網——每日最新資訊28at.com

這邊我們以TomcatServletWebServerFactory為例,看下它的getWebServerFactory方法。SFw28資訊網——每日最新資訊28at.com

public WebServer getWebServer(ServletContextInitializer... initializers) {		if (this.disableMBeanRegistry) {			Registry.disableRegistry();		}		Tomcat tomcat = new Tomcat();		File baseDir = (this.baseDirectory != null) ? this.baseDirectory : createTempDir("tomcat");		tomcat.setBaseDir(baseDir.getAbsolutePath());		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);	}

這邊創建了tomcat容器并初始化,然后返回。SFw28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-88925-0.htmlSpring Boot 內嵌 Web 容器啟動原理,驚爆你的眼球!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 關于 Python 的十個核心概念精講

下一篇: 一文徹底搞明白享元模式

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产欧美另类| 亚洲欧美国产精品专区久久| 欧美激情精品久久久久久黑人| 久久婷婷丁香| 国产日韩精品综合网站| 国产伦精品一区二区三区照片91| 国产日韩精品在线| 伊人色综合久久天天五月婷| 一区二区三区视频在线播放| 欧美激情按摩在线| 欧美成人日韩| 1769国产精品| 国产精品视频观看| 欧美亚洲一区三区| 国产精品国码视频| 欧美一级黄色录像| 国产欧美在线观看一区| 免费看成人av| 亚洲国产高清aⅴ视频| 亚洲午夜日本在线观看| 国产精品国产三级国产aⅴ浪潮| 亚洲欧美国产视频| 韩国欧美一区| 欧美日韩国产电影| 久久精品网址| 亚洲午夜久久久| 欧美婷婷六月丁香综合色| 国产自产高清不卡| 亚洲人在线视频| 性久久久久久久久| 欧美激情一区二区在线| 国产啪精品视频| 99亚洲伊人久久精品影院红桃| 久久精品人人做人人综合| 欧美三级午夜理伦三级中视频| 亚洲电影免费观看高清| 亚洲欧美日韩在线一区| 欧美日韩国产小视频在线观看| 狠狠入ady亚洲精品| 午夜精品区一区二区三| 欧美日韩精品免费观看| 亚洲国产精品一区二区三区| 久久精品国产亚洲精品 | 开心色5月久久精品| 国产精品久久网站| 亚洲人成久久| 久久综合一区| 国产在线精品自拍| 亚洲欧美日韩一区二区| 欧美日韩精品免费观看视一区二区 | 亚洲欧美日韩国产综合精品二区| 欧美成人一区二区| 国内伊人久久久久久网站视频| 亚洲天堂第二页| 欧美另类在线播放| 亚洲区免费影片| 欧美~级网站不卡| 精品福利电影| 久久久国产精品一区二区中文| 国产精品v片在线观看不卡| 亚洲免费成人av| 欧美国产日本在线| 亚洲欧洲一级| 欧美大片91| 亚洲国产网站| 欧美大香线蕉线伊人久久国产精品| 国产综合亚洲精品一区二| 欧美一区二视频| 国产日韩精品一区二区浪潮av| 亚洲自拍都市欧美小说| 欧美系列亚洲系列| 一区二区三区久久久| 欧美日韩国产成人在线91| 亚洲乱码国产乱码精品精天堂| 欧美mv日韩mv亚洲| 亚洲国产精品成人精品| 久久综合婷婷| **欧美日韩vr在线| 女主播福利一区| 亚洲国产日韩精品| 欧美二区在线观看| 亚洲精品一区中文| 欧美人与性动交cc0o| 亚洲精品中文字幕在线| 欧美老女人xx| 在线视频亚洲欧美| 欧美性大战xxxxx久久久| 亚洲一区二区三区欧美| 国产精品卡一卡二| 午夜精品区一区二区三| 国产日韩欧美a| 久久久久久久久蜜桃| 在线播放不卡| 欧美国产精品久久| 日韩亚洲欧美中文三级| 欧美视频一区二区在线观看| 亚洲免费中文字幕| 国产视频不卡| 两个人的视频www国产精品| 亚洲欧洲三级| 欧美亚洲不卡| 欧美一区二区播放| 极品少妇一区二区三区| 免费在线欧美黄色| 99日韩精品| 国产伦理一区| 久久男女视频| 亚洲免费电影在线观看| 国产精品久久福利| 久久精品一级爱片| 亚洲国产精彩中文乱码av在线播放| 欧美激情一区二区三区在线视频观看| 日韩视频在线观看免费| 国产精品日韩| 久久一区二区精品| 99v久久综合狠狠综合久久| 国产精品av一区二区| 久久激情五月激情| 亚洲日产国产精品| 国产精品一区二区久久久| 久久久久免费| av成人免费在线观看| 国产亚洲精品bt天堂精选| 免费在线日韩av| 亚洲女同在线| 亚洲国产另类久久久精品极度| 欧美日韩和欧美的一区二区| 欧美一区二区三区喷汁尤物| 亚洲国产免费看| 国产精品亚洲美女av网站| 久久在线免费| 亚洲一区国产精品| 一区二区在线不卡| 国产精品久久久久永久免费观看| 久久欧美肥婆一二区| 亚洲无毛电影| 亚洲国产精品尤物yw在线观看| 国产精品久久一级| 欧美电影免费观看高清完整版 | 欧美激情第4页| 欧美一级视频免费在线观看| 亚洲欧洲在线视频| 国产欧美精品一区二区色综合 | 欧美一区激情| 99精品视频一区| 好吊色欧美一区二区三区四区 | 亚洲伦伦在线| 国内精品国产成人| 国产精品高潮呻吟久久av无限| 另类成人小视频在线| 午夜宅男欧美| 99在线精品视频在线观看| 黄色成人免费观看| 国产精品magnet| 免费日韩av| 欧美一区午夜精品| aa成人免费视频| 亚洲成色777777在线观看影院| 国产精品久久久久久久久久尿| 欧美a级片一区| 久久久久久夜精品精品免费| 亚洲专区免费| av成人福利| 亚洲黄色影片| 激情六月婷婷久久| 国产伦精品一区| 欧美色中文字幕| 欧美激情一二三区| 久久综合国产精品| 久久久久久久久久久久久女国产乱 | 欧美一区视频| 亚洲欧美国产不卡| 一本大道久久a久久综合婷婷| 在线观看91精品国产入口| 国产精品一区2区| 欧美日韩一区二区视频在线观看| 免费观看一区| 久久亚洲不卡| 久久国产视频网站| 在线看成人片| 伊人男人综合视频网| 国产一区二区三区在线观看精品 | 国内精品美女在线观看| 国产精品网曝门| 欧美亚州韩日在线看免费版国语版| 欧美激情一区二区三区在线| 裸体丰满少妇做受久久99精品 | 国产欧美日韩视频在线观看| 欧美视频免费在线| 欧美午夜精品一区| 欧美三级电影大全| 欧美午夜精品理论片a级大开眼界| 欧美精品一区二区三| 欧美国产大片| 欧美精品一区二区蜜臀亚洲| 欧美国产日韩在线观看| 欧美高清在线一区| 欧美乱大交xxxxx| 欧美久久影院| 欧美日韩三级电影在线| 欧美三级乱码| 国产精品女主播| 国产精品一区二区你懂的| 国产精品日韩欧美一区二区|