首頁 > 軟體

SpringBoot嵌入式Web容器原理與使用介紹

2022-10-22 14:00:38

嵌入式 Web 容器:應用中內建伺服器(Tomcat),不用在外部設定伺服器了

原理

  • SpringBoot 專案啟動,發現是 web 應用,引入 web 場景包 ----- 如:Tomcat
  • web 應用建立一個 web 版的 IOC 容器 ServletWebServerApplicationContext
  • ServletWebServerApplicationContext 啟動的時候尋找 ServletWebServerFactory (Servlet 的 web 伺服器工廠,用於生產 Servlet 伺服器)
  • ServletWebServerFactory 底層預設有很多 Web 伺服器工廠

  • 底層會自動設定好 ,自動設定類 ServletWebServerFactoryAutoConfiguration
  • ServletWebServerFactoryAutoConfiguration 匯入 ServletWebServerFactoryConfiguration 工廠設定類

ServletWebServerFactoryConfiguration.class

  • 動態判斷系統中匯入了那個web伺服器設定包
  • 如果匯入 Tomcat 依賴,會自動放一個 Tomcat 伺服器工廠, TomcatServletWebServerFactory 為我們建立出 Tomcat 伺服器工廠
  • Tomcat 底層支援如下伺服器

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

總結: 所謂內嵌伺服器,就是把我們手動啟動伺服器的方法放進框架中了。

應用

1. 切換Web伺服器

排除 tomcat 伺服器,匯入 undertow 依賴

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

2. 客製化伺服器規則

方法一: 修改 server 下的組態檔

ServerProperties.class

server.undertow.accesslog.dir=/tmp

方法二: 自定義 ConfigurableServletWebServerFactory

方法三: 自定義 ServletWebServerFactoryCustomizer 客製化化器

作用: 將組態檔的值,與 ServletWebServerFactory 繫結

SpringBoot 設計: Customizer 客製化化器,可以客製化 XXX 規則

到此這篇關於SpringBoot嵌入式Web容器原理與使用介紹的文章就介紹到這了,更多相關SpringBoot嵌入式Web容器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com