最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成Tomcat服務(wù)架構(gòu)配置

 更新時間:2023年02月22日 11:16:28   作者:知了一笑  
這篇文章主要為大家介紹了SpringBoot集成Tomcat服務(wù)架構(gòu)配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、Tomcat集成

使用的成本越低,內(nèi)部封裝越復(fù)雜;

1、依賴層級

在SpringBoot框架的web依賴包中,引入的是內(nèi)嵌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項目中不顯式更換其他服務(wù)依賴時,默認(rèn)提供了對Tomcat服務(wù)的管理;

@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架構(gòu)

Server:代表整個Tomcat容器;

Service:服務(wù)器內(nèi)部的中間組件,將一個或多個Connector綁定到一個Engine上;

Engine:表示特定服務(wù)的請求處理管道,接收Connector的請求并響應(yīng);

Host:網(wǎng)絡(luò)主機名稱;

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

Context:代表一個Web應(yīng)用程序的上下文;

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

三、Tomcat配置

1、基礎(chǔ)配置

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

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

2、屬性配置類

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

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

@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、配置加載分析

  • 基于配置的屬性,定制化管理Tomcat服務(wù)的信息;
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服務(wù)工廠,這里在創(chuàng)建WebServer時,使用的是Tomcat,需要適當(dāng)?shù)牧私庖幌耇omcat架構(gòu);
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、控制類

  • WebServer的簡單接口,只聲明端口獲取,服務(wù)啟動和停止相關(guān)方法;
public interface WebServer {
	// 獲取監(jiān)聽的端口
	int getPort();
	// 服務(wù)啟動
	void start() throws WebServerException;
	// 服務(wù)停止
	void stop() throws WebServerException;
}
  • SpringBoot中,Tomcat服務(wù)核心控制類,通過TomcatServletWebServerFactory工廠類創(chuàng)建,對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基礎(chǔ)配置,比如默認(rèn)的Port和HostName,以及生命周期管理的方法,TomcatWebServer類中調(diào)用的就是該API中的具體方法;
public class Tomcat {
    protected Server server;
    protected int port = 8080;
    protected String hostname = "localhost";
    // 初始化服務(wù)
    public void init() throws LifecycleException {
        getServer();
        server.init();
    }
    // 啟動服務(wù)
    public void start() throws LifecycleException {
        getServer();
        server.start();
    }
    // 停止服務(wù)
    public void stop() throws LifecycleException {
        getServer();
        server.stop();
    }
}

2、核心方法

2.1 初始化,初始化時,調(diào)用Apache-Tomcat類中啟動方法;

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

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

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

2.3 停止,在組件生命周期的常規(guī)管理邏輯中,停止服務(wù)之后進行銷毀動作的執(zhí)行,其中自然涉及到多個狀態(tài)標(biāo)識的轉(zhuǎn)換;

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

參考源碼

編程文檔:

https://gitee.com/cicadasmile/butte-java-note

應(yīng)用倉庫:

https://gitee.com/cicadasmile/butte-flyer-parent

以上就是SpringBoot集成Tomcat服務(wù)架構(gòu)配置的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot集成Tomcat的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 利用Spring MVC+Mybatis實現(xiàn)Mysql分頁數(shù)據(jù)查詢的過程詳解

    利用Spring MVC+Mybatis實現(xiàn)Mysql分頁數(shù)據(jù)查詢的過程詳解

    這篇文章主要給大家介紹了關(guān)于利用Spring MVC+Mybatis實現(xiàn)Mysql分頁數(shù)據(jù)查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • 詳解SpringBoot如何優(yōu)雅的進行測試打包部署

    詳解SpringBoot如何優(yōu)雅的進行測試打包部署

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何優(yōu)雅的進行測試打包部署,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • 關(guān)于Selenium的UI自動化測試屏幕截圖功能實例代碼

    關(guān)于Selenium的UI自動化測試屏幕截圖功能實例代碼

    今天小編就為大家分享一篇關(guān)于Selenium的UI自動化測試屏幕截圖功能實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Kotlin基礎(chǔ)教程之操作符與操作符重載

    Kotlin基礎(chǔ)教程之操作符與操作符重載

    這篇文章主要介紹了Kotlin基礎(chǔ)教程之操作符與操作符重載的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • SpringBoot熱部署配置過程

    SpringBoot熱部署配置過程

    這篇文章主要介紹了SpringBoot熱部署配置過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Maven多模塊及version修改的實現(xiàn)方法

    Maven多模塊及version修改的實現(xiàn)方法

    這篇文章主要介紹了Maven多模塊及version修改的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Spring?Boot多個定時任務(wù)阻塞問題的解決方法

    Spring?Boot多個定時任務(wù)阻塞問題的解決方法

    在日常的項目開發(fā)中,往往會涉及到一些需要做到定時執(zhí)行的代碼,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot多個定時任務(wù)阻塞問題的解決方法,需要的朋友可以參考下
    2022-01-01
  • Spring?Boot?Admin集成與自定義監(jiān)控告警示例詳解

    Spring?Boot?Admin集成與自定義監(jiān)控告警示例詳解

    SpringBootAdmin是一個管理和監(jiān)控SpringBoot應(yīng)用程序的工具,可通過集成和配置實現(xiàn)應(yīng)用監(jiān)控與告警功能,本文給大家介紹Spring?Boot?Admin集成與自定義監(jiān)控告警示例詳解,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • SpringBoot快速整合SpringSecurity的詳細(xì)步驟(新手都會!)

    SpringBoot快速整合SpringSecurity的詳細(xì)步驟(新手都會!)

    日 Spring Security 是針對Spring項目的安全框架,也是Spring Boot底層安全模塊默認(rèn)的技術(shù)選型,他可以實現(xiàn)強大的Web安全控制,下面這篇文章主要給大家介紹了關(guān)于SpringBoot快速整合SpringSecurity的詳細(xì)步驟,需要的朋友可以參考下
    2023-03-03
  • jQuery 動畫效果代碼分享

    jQuery 動畫效果代碼分享

    本文給大家分享一段關(guān)于jquery實現(xiàn)的動畫效果,代碼簡單易懂,非常不錯,感興趣的朋友參考下
    2016-11-11

最新評論

乌拉特后旗| 杭锦后旗| 新乐市| 苍南县| 平南县| 武鸣县| 阜宁县| 化州市| 鹤庆县| 泾源县| 大方县| 调兵山市| 扬州市| 甘谷县| 固安县| 江陵县| 通榆县| 荥经县| 西青区| 丹阳市| 五原县| 若羌县| 武安市| 安康市| 伊宁县| 鄯善县| 桂平市| 武城县| 仙桃市| 遂昌县| 定襄县| 扎赉特旗| 邢台市| 阳谷县| 泽库县| 兰州市| 平乐县| 宁国市| 云龙县| 军事| 石河子市|