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

Spring Boot 定制與優(yōu)化內(nèi)置的Tomcat容器實例詳解

 更新時間:2017年12月06日 09:56:40   投稿:mrr  
本文主要記錄對內(nèi)置容器優(yōu)化和定制的方式,用于自己加深對SpringBoot理解。本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友參考下吧

1、Spring Boot 定制與優(yōu)化內(nèi)置Tomcat容器。

> 內(nèi)置的容器有三個分別是Undertow、Jetty、Tomcat,Spring Boot 對這三個容器分別進(jìn)行了實現(xiàn),它們上層接口都是EmbeddedServletContainerFactory,該接口也是本文的主要核心.

對于內(nèi)置容器的定制與優(yōu)化主要有兩種方式,第一種方式是通過配置文件來配置,另外一種是通過碼代碼的方式.接下來主要對上述兩種方式進(jìn)行實現(xiàn)。

2、通過配置文件來定制與優(yōu)化Tomcat

> 配置的核心內(nèi)容參考o(jì)rg.springframework.boot.autoconfigure.web.ServerProperties這個服務(wù)屬性類,下面展示部分對tomcat的配置

server:
 port: 8081
 # tomcat設(shè)置
 tomcat:
 accesslog:
 # 開啟日志訪問
  enabled: true
 # 日志保存路徑
  directory: e:/tmp/logs

更多的配置內(nèi)容參考o(jì)rg.springframework.boot.autoconfigure.web.ServerProperties類內(nèi)置屬性。

3、通過碼代碼方式實現(xiàn)對內(nèi)置容器的配置與優(yōu)化

> 有兩種方式顯示用代碼進(jìn)行對內(nèi)置容器進(jìn)行優(yōu)化與定制,第一種實現(xiàn)內(nèi)置Servlet容器定制器(org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer),并將類交給Spring容器管理,另外一種是在Spring容器中配置EmbeddedServletContainerFactory接口實現(xiàn)類,這里我們主要針對內(nèi)置Tomcat,即TomcatEmbeddedServletContainerFactory類

3.1、第一種方式實現(xiàn)EmbeddedServletContainerCustomizer接口,并交給Spring容器管理

@Component
public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer {
  @Override
  public void customize(ConfigurableEmbeddedServletContainer container) {
    //org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory 
    //說明默認(rèn)是的Tomcat容器
    System.out.println(container.getClass());
    TomcatEmbeddedServletContainerFactory factory = (TomcatEmbeddedServletContainerFactory) container;
    //設(shè)置端口
    factory.setPort(8088);
    //設(shè)置Tomcat的根目錄
    factory.setBaseDirectory(new File("d:/tmp/tomcat"));
    //設(shè)置訪問日志存放目錄
    factory.addContextValves(getLogAccessLogValue());
    //設(shè)置Tomcat線程數(shù)和連接數(shù)
    factory.addConnectorCustomizers(new MyTomcatConnectorCustomizer());
    //初始化servletContext對象
    factory.addInitializers((servletContext) -> {
      System.out.println(" = = = = 獲取服務(wù)器信息 = = " + servletContext.getServerInfo());
    });
  }
  private AccessLogValve getLogAccessLogValue() {
    AccessLogValve accessLogValve = new AccessLogValve();
    accessLogValve.setDirectory("d:/tmp/tomcat/logs");
    accessLogValve.setEnabled(true);
    accessLogValve.setPattern(Constants.AccessLog.COMMON_PATTERN);
    accessLogValve.setPrefix("springboot-access-log");
    accessLogValve.setSuffix(".txt");
    return accessLogValve;
  }
}
/**
 * 定制tomcat的連接數(shù)與線程數(shù)
 */
class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer {
  @Override
  public void customize(Connector connector) {
    //連接協(xié)議 HTTP/1.1
    System.out.println(connector.getProtocol());
    //連接協(xié)議處理器 org.apache.coyote.http11.Http11NioProtocol
    System.out.println(connector.getProtocolHandler().getClass());
    //Http11NioProtocol
    Http11NioProtocol protocolHandler = (Http11NioProtocol) connector.getProtocolHandler();
    // 設(shè)置最大連接數(shù)
    protocolHandler.setMaxConnections(2000);
    // 設(shè)置最大線程數(shù)
    protocolHandler.setMaxThreads(500);
  }
}

3.1、在Spring容器中配置EmbeddedServletContainerFactory實現(xiàn)類

@SpringBootConfiguration
public class WebServerConfiguration {
  @Bean
  public EmbeddedServletContainerFactory embeddedServletContainerFactory() {
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
    //設(shè)置端口
    factory.setPort(8089);
    //設(shè)置404錯誤界面
    factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
    //設(shè)置在容器初始化的時候觸發(fā)
    factory.addInitializers((servletContext) -> {
      System.out.println(" = = = = 獲取服務(wù)器信息 = = " + servletContext.getServerInfo());
    });
    //設(shè)置最大連接數(shù)和最大線程數(shù)
    factory.addConnectorCustomizers((connector) -> {
      Http11NioProtocol protocolHandler = (Http11NioProtocol) connector.getProtocolHandler();
      protocolHandler.setMaxConnections(2000);
      protocolHandler.setMaxThreads(500);
    });
    //設(shè)置訪問日志記錄文件的目錄
    factory.addContextValves(getLogAccessLogValue());
    return factory;
  }
  private AccessLogValve getLogAccessLogValue() {
    AccessLogValve accessLogValve = new AccessLogValve();
    accessLogValve.setDirectory("d:/tmp/logs");
    accessLogValve.setEnabled(true);
    accessLogValve.setPattern(Constants.AccessLog.COMMON_PATTERN);
    accessLogValve.setPrefix("SpringBoot-Access-Log");
    accessLogValve.setSuffix(".txt");
    return accessLogValve;
  }
}

4、總結(jié)

以上所述是小編給大家介紹的Spring Boot 定制與優(yōu)化內(nèi)置的Tomcat容器實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java 基礎(chǔ)詳解(泛型、集合、IO、反射)

    Java 基礎(chǔ)詳解(泛型、集合、IO、反射)

    下面小編就為大家?guī)硪黄狫ava 基礎(chǔ)詳解(泛型、集合、IO、反射)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 布隆過濾器的原理以及java 簡單實現(xiàn)

    布隆過濾器的原理以及java 簡單實現(xiàn)

    這篇文章主要介紹了布隆過濾器的原理以及java 簡單實現(xiàn),幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-11-11
  • 五種JAVA GUI布局管理的方式

    五種JAVA GUI布局管理的方式

    這篇文章主要介紹了JAVA幾種GUI布局管理的相關(guān)知識,文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 解析java中volatile關(guān)鍵字

    解析java中volatile關(guān)鍵字

    這篇文章主要為大家解析了java中volatile關(guān)鍵字,經(jīng)常有人把volatile關(guān)鍵字和synchronized或者lock混淆,本文就為大家好好區(qū)分,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java禁止使用finalize方法

    Java禁止使用finalize方法

    這篇文章主要介紹了Java禁止使用finalize方法,需要的朋友可以參考下
    2017-10-10
  • Java實現(xiàn)學(xué)生管理系統(tǒng)

    Java實現(xiàn)學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • JavaWeb學(xué)習(xí)筆記之Filter和Listener

    JavaWeb學(xué)習(xí)筆記之Filter和Listener

    這篇文章主要給大家介紹了關(guān)于JavaWeb學(xué)習(xí)筆記之Filter和Listener的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • maven混淆打包的實現(xiàn)步驟

    maven混淆打包的實現(xiàn)步驟

    本文主要介紹了maven混淆打包的實現(xiàn)步驟,包含了Maven項目混淆、瘦身、打包exe這幾個方面,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Springboot文件上傳功能的實現(xiàn)

    Springboot文件上傳功能的實現(xiàn)

    這篇文章主要介紹了SpringBoot文件上傳功能的實現(xiàn),文中通過代碼示例介紹的非常詳細(xì),具有一定的參考學(xué)習(xí)價值,需要的朋友們可以參考閱讀
    2023-04-04
  • java類的定義與使用舉例詳解

    java類的定義與使用舉例詳解

    這篇文章主要給大家介紹了關(guān)于java類的定義與使用的相關(guān)資料,類的方法是用來定義類的行為,在方法中通過操作類的成員變量、編寫業(yè)務(wù)邏輯、返回 結(jié)果等實現(xiàn)類的業(yè)務(wù)行為,需要的朋友可以參考下
    2023-11-11

最新評論

师宗县| 隆回县| 长春市| 大安市| 龙山县| 麦盖提县| 米脂县| 安丘市| 灌云县| 连江县| 唐山市| 泾川县| 浦东新区| 和林格尔县| 庆阳市| 陆河县| 长汀县| 海兴县| 湄潭县| 乐陵市| 菏泽市| 涿州市| 小金县| 仁怀市| 乐平市| 石河子市| 介休市| 荔波县| 曲松县| 靖宇县| 海南省| 陵川县| 商丘市| 扎鲁特旗| 剑阁县| 东安县| 会泽县| 隆化县| 崇仁县| 普定县| 泾川县|