欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

> 配置的核心內(nèi)容參考o(jì)rg.springframework.boot.autoconfigure.web.ServerProperties這個(gè)服務(wù)屬性類,下面展示部分對(duì)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、通過碼代碼方式實(shí)現(xiàn)對(duì)內(nèi)置容器的配置與優(yōu)化

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

3.1、第一種方式實(shí)現(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對(duì)象
    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實(shí)現(xiàn)類

@SpringBootConfiguration
public class WebServerConfiguration {
  @Bean
  public EmbeddedServletContainerFactory embeddedServletContainerFactory() {
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
    //設(shè)置端口
    factory.setPort(8089);
    //設(shè)置404錯(cuò)誤界面
    factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
    //設(shè)置在容器初始化的時(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容器實(shí)例詳解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論