两种定制tomcat 的方法
1.实现EmbeddedServletContainerCustomizer接口,并将实现类纳入spring容器中管理
2.new 一个TomcatEmbeddedServletContainerFactory,并将类纳入spring容器中管理
一般tomcat优化会优化这2个参数
http11NioProtocol.setPollerThreadCount(2000);
http11NioProtocol.setMaxThreads(500);
例子实现代码:
@Component
public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory = (TomcatEmbeddedServletContainerFactory)configurableEmbeddedServletContainer;
tomcatEmbeddedServletContainerFactory.setPort(8008);
tomcatEmbeddedServletContainerFactory.addContextValves(getAccessLogValve());
tomcatEmbeddedServletContainerFactory.addConnectorCustomizers(new MyTomcatConnectorCustomizer());
}
private AccessLogValve getAccessLogValve(){
AccessLogValve log = new AccessLogValve();
log.setEnabled(true);
log.setPattern("%h %l %u %t \"%r\" %s %b");
log.setDirectory("e:/temp/logs");
log.setPrefix("springboot-access-log");
log.setSuffix(".txt");
return log;
}
}
class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer{
@Override
public void customize(Connector connector) {
System.out.println(connector.getProtocolHandler().getClass());
Http11NioProtocol http11NioProtocol = (Http11NioProtocol)connector.getProtocolHandler();
System.out.println(http11NioProtocol.getPollerThreadCount());
System.out.println(http11NioProtocol.getMaxThreads());
http11NioProtocol.setPollerThreadCount(2);
http11NioProtocol.setMaxThreads(500);
}
}