015-Spring Boot 定制和優化內嵌的Tomcat
阿新 • • 發佈:2018-03-30
web容器 ffi add nec app ase class new ont
一、內嵌web容器
參看http://www.cnblogs.com/bjlhx/p/8372584.html
查看源碼可知提供以下三種:
二、定制優化tomcat
2.1、配置文件配置
通過application.properties配置tomcat
端口配置:server.port=10001
地址配置:server.adress=192.168.1.1
通過ServerProperties查看到tomcat變量,進入即可配置,如下
啟用日誌配置:
server.tomcat.accesslog.enabled=true server.tomcat.accesslog.directory=d:/logs
原理分析
在spring-boot-autoconfigure-1.5.9.RELEASE.jar包中的org.springframework.boot.autoconfigure.web.ServerProperties查看
可以查看到以上所示屬性
2.2、通過代碼方式配置一-實現EmbeddedServletContainerCustomizer接口
EmbeddedServletContainerCustomizer→三個具體默認實現
1》代碼方式自定義
定義一個類MyEmbeddedServletContainerCustomizer實現EmbeddedServletContainerCustomizer接口,即可
設置基本配置
@Component public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override public void customize(ConfigurableEmbeddedServletContainer container) { System.out.println(container.getClass()); TomcatEmbeddedServletContainerFactory factoryView Code=(TomcatEmbeddedServletContainerFactory)container; factory.setPort(8181); factory.setBaseDirectory(new File("d:/tmp/tomcat")); } }
設置日誌
package com.lhx.spring.springboot_web; import java.io.File; import org.apache.catalina.valves.AccessLogValve; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.stereotype.Component; @Component public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override public void customize(ConfigurableEmbeddedServletContainer container) { System.out.println(container.getClass()); TomcatEmbeddedServletContainerFactory factory =(TomcatEmbeddedServletContainerFactory)container; factory.setPort(8181); factory.setBaseDirectory(new File("d:/tmp/tomcat")); factory.addContextValves(getAccessLogValve()); } private AccessLogValve getAccessLogValve() { AccessLogValve log = new AccessLogValve(); log.setDirectory("d:/tmp/logs"); log.setEnabled(true); log.setPattern("common"); log.setPrefix("spring-boot-lhx-access-log"); log.setSuffix(".txt"); return log; } }View Code
設置連接數配置、最大線程
package com.lhx.spring.springboot_web; import java.io.File; import org.apache.catalina.connector.Connector; import org.apache.catalina.valves.AccessLogValve; import org.apache.coyote.http11.Http11NioProtocol; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.stereotype.Component; @Component public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override public void customize(ConfigurableEmbeddedServletContainer container) { System.out.println(container.getClass()); TomcatEmbeddedServletContainerFactory factory =(TomcatEmbeddedServletContainerFactory)container; factory.setPort(8181); factory.setBaseDirectory(new File("d:/tmp/tomcat")); factory.addContextValves(getAccessLogValve()); factory.addConnectorCustomizers(new MyTomcatConnectorCustomizers()); } private AccessLogValve getAccessLogValve() { AccessLogValve log = new AccessLogValve(); log.setDirectory("d:/tmp/logs"); log.setEnabled(true); log.setPattern("common"); log.setPrefix("spring-boot-lhx-access-log"); log.setSuffix(".txt"); return log; } } class MyTomcatConnectorCustomizers implements TomcatConnectorCustomizer{ @Override public void customize(Connector connector) { Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler(); protocol.setMaxConnections(2000); protocol.setMaxThreads(500); } }View Code
2.5、通過代碼方式配置二-默認配置類方式
package com.lhx.spring.springboot_web; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.boot.web.servlet.ErrorPage; import org.springframework.context.annotation.Bean; import org.springframework.http.HttpStatus; @SpringBootConfiguration public class WebServletConfiguration { @Bean public EmbeddedServletContainerFactory createEmbeddedServletContainerFactory() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); factory.setPort(1008); factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html")); return factory; } }View Code
添加初始化
factory.addInitializers((servletContext)->{ System.out.println("----------servletContext startup----------"); });
此時可以獲取到servletContext信息,可以進行添加Filter、設置Attribute等
源碼地址:https://github.com/bjlhx15/spring-boot.git
015-Spring Boot 定制和優化內嵌的Tomcat