中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot集成Tomcat服務架構怎么配置

發布時間:2023-02-22 11:15:40 來源:億速云 閱讀:100 作者:iii 欄目:開發技術

這篇“SpringBoot集成Tomcat服務架構怎么配置”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“SpringBoot集成Tomcat服務架構怎么配置”文章吧。

一、Tomcat集成

使用的成本越低,內部封裝越復雜

1、依賴層級

在SpringBoot框架的web依賴包中,引入的是內嵌Tomcat組件,基于SpringBoot的版本,Tomcat集成的是9.0版本;

<!-- 1、項目工程依賴 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<!-- 2、starter-web依賴 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <version>2.2.5.RELEASE</version>
  <scope>compile</scope>
</dependency>
<!-- 3、starter-tomcat依賴 -->
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-core</artifactId>
  <version>9.0.31</version>
  <scope>compile</scope>
</dependency>

2、自動化配置

在SpringBoot框架的自動配置類中,Web項目中不顯式更換其他服務依賴時,默認提供了對Tomcat服務的管理;

@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
		ServletWebServerFactoryConfiguration.EmbeddedTomcat.class})
public class ServletWebServerFactoryAutoConfiguration {
	@Bean
	@ConditionalOnClass(name = "org.apache.catalina.startup.Tomcat")
	public TomcatServletWebServerFactoryCustomizer tomcatServletWebServerFactoryCustomizer(
			ServerProperties serverProperties) {
		return new TomcatServletWebServerFactoryCustomizer(serverProperties);
	}
}

二、Tomcat架構

SpringBoot集成Tomcat服務架構怎么配置

Server:代表整個Tomcat容器;

Service:服務器內部的中間組件,將一個或多個Connector綁定到一個Engine上;

Engine:表示特定服務的請求處理管道,接收Connector的請求并響應;

Host:網絡主機名稱;

Connector:連接器處理與客戶端的通信;

Context:代表一個Web應用程序的上下文;

參考Tomcat9.0版本的核心組件描述,對于框架有大致的了解后,再去分析集成原理,會更容易把握主線邏輯;

三、Tomcat配置

1、基礎配置

在配置文件中,對Tomcat做一些基礎性的設置,查看下面的配置類可以知道,這些屬性存在默認值;

server:
  port: 8082                # 端口號
  tomcat:                   # Tomcat組件
    uri-encoding: UTF-8     # URI編碼
    max-threads: 100        # 最大工作線程
    min-spare-threads: 10   # 最小工作線程

2、屬性配置類

在服務配置中,提供多種服務器的適配,像Tomcat、Jetty、Netty、Undertow,從策略上看,配置分為公共屬性以及各種服務器的適配屬性;

更多配置信息,可以參考完整的源碼和注釋說明;

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {
    private Integer port;
    public static class Tomcat {
        private Charset uriEncoding = StandardCharsets.UTF_8;
        private int maxThreads = 200;
        private int minSpareThreads = 10;
    }
}

3、配置加載分析

SpringBoot集成Tomcat服務架構怎么配置

  • 基于配置的屬性,定制化管理Tomcat服務的信息;

public class TomcatWebServerFactoryCustomizer
        implements WebServerFactoryCustomizer&lt;ConfigurableTomcatWebServerFactory&gt; {
    @Override
    public void customize(ConfigurableTomcatWebServerFactory factory) {
        ServerProperties properties = this.serverProperties;
        ServerProperties.Tomcat tomcatProperties = properties.getTomcat();
        PropertyMapper propertyMapper = PropertyMapper.get();
        customizeStaticResources(factory);
    }
}
  • TomcatWeb服務工廠,這里在創建WebServer時,使用的是Tomcat,需要適當的了解一下Tomcat架構;

public class TomcatServletWebServerFactory extends AbstractServletWebServerFactory
        implements ConfigurableTomcatWebServerFactory, ResourceLoaderAware {
    @Override
    public WebServer getWebServer(ServletContextInitializer... initializers) {
        Tomcat tomcat = new Tomcat();
        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());
        prepareContext(tomcat.getHost(), initializers);
        return getTomcatWebServer(tomcat);
    }
}

四、周期管理方法

1、控制類

SpringBoot集成Tomcat服務架構怎么配置

  • WebServer的簡單接口,只聲明端口獲取,服務啟動和停止相關方法;

public interface WebServer {
	// 獲取監聽的端口
	int getPort();
	// 服務啟動
	void start() throws WebServerException;
	// 服務停止
	void stop() throws WebServerException;
}
  • SpringBoot中,Tomcat服務核心控制類,通過TomcatServletWebServerFactory工廠類創建,對Tomcat生命周期的管理提供了一層包裝;

public class TomcatWebServer implements WebServer {
    private final Tomcat tomcat;
    private final Map&lt;Service, Connector[]&gt; serviceConnectors = new HashMap&lt;&gt;();
}
  • Apache組件中,輕量級Tomcat啟動器,提供了Tomcat基礎配置,比如默認的Port和HostName,以及生命周期管理的方法,TomcatWebServer類中調用的就是該API中的具體方法;

public class Tomcat {
    protected Server server;
    protected int port = 8080;
    protected String hostname = "localhost";
    // 初始化服務
    public void init() throws LifecycleException {
        getServer();
        server.init();
    }
    // 啟動服務
    public void start() throws LifecycleException {
        getServer();
        server.start();
    }
    // 停止服務
    public void stop() throws LifecycleException {
        getServer();
        server.stop();
    }
}

2、核心方法

2.1 初始化,初始化時,調用Apache-Tomcat類中啟動方法;

public class TomcatWebServer implements WebServer {
    /**
     * 初始化方法
     */
    private void initialize() throws WebServerException {
        // 控制臺日志
        logger.info("Tomcat initialized with port(s): " + getPortsDescription(false));
        synchronized (this.monitor) {
            // 調用Apache-Tomcat類中啟動方法
            this.tomcat.start();
        }
    }
}

2.2 啟動,在初始化的方法中,調用的Tomcat啟動方法,這里對狀態進行校驗并輸出日志;

public class TomcatWebServer implements WebServer {
    /**
     * 啟動方法
     */
    public void start() throws WebServerException {
        synchronized (this.monitor) {
            if (this.started) {
                return;
            }
            checkThatConnectorsHaveStarted();
            // 啟動狀態的標識
            this.started = true;
            // 控制臺日志
            logger.info("Tomcat started on port(s): " + getPortsDescription(true) + " with context path '"
                    + getContextPath() + "'");
        }
    }
}

2.3 停止,在組件生命周期的常規管理邏輯中,停止服務之后進行銷毀動作的執行,其中自然涉及到多個狀態標識的轉換;

public class TomcatWebServer implements WebServer {
    /**
     * 停止方法
     */
    public void stop() throws WebServerException {
        synchronized (this.monitor) {
            // 狀態變化
            boolean wasStarted = this.started;
            this.started = false;
            // Tomcat服務停止
            stopTomcat();
            this.tomcat.destroy();
        }
    }
}

以上就是關于“SpringBoot集成Tomcat服務架構怎么配置”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐业县| 南昌县| 巨野县| 辽源市| 浦县| 淮阳县| 新兴县| 额尔古纳市| 原平市| 宁强县| 嵊州市| 遵义县| 香河县| 水富县| 陵水| 攀枝花市| 中超| 丰顺县| 太保市| 宿松县| 怀集县| 荔波县| 娱乐| 河北区| 鸡西市| 镇平县| 烟台市| 莱芜市| 敦化市| 新平| 安多县| 利川市| 淳安县| 太谷县| 页游| 香格里拉县| 岐山县| 诸暨市| 临洮县| 驻马店市| 台湾省|