自定义配置Tomcat
//springboot配置tomcat
@Component
public class EmbeddedTomcatConfig implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
@Override
public void customize(ConfigurableServletWebServerFactory factory) {
((TomcatServletWebServerFactory)factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
protocol.setMaxConnections(200);
protocol.setMaxThreads(200);
protocol.setSelectorTimeout(3000);
protocol.setSessionTimeout(3000);
protocol.setConnectionTimeout(3000);
}
});
}
}
spingboot1.x同springboot2.x作对比
springboot1.x的相关类如下:
- org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer
- org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer
- org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer
- org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory
springboot2.x的相关类如下:
- org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory
- org.springframework.boot.web.server.WebServerFactoryCustomizer
- org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer
- org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory
springboot Tomcat配置多个端口
application.properties添加自定义属性
server.addtional-ports=8082,8083
在类中映射属性值(这里我直接在入口类中定义的)
@Value("${server.addtional-ports}")
String ports;
注入Bean以及定义Connector方法
@Bean
public TomcatServletWebServerFactory getFactory() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
Connector[] connectors = this.addtionalConnetors();
if (connectors!=null && connectors.length>0){
tomcat.addAdditionalTomcatConnectors(connectors);
}
return tomcat;
}
private Connector[] addtionalConnetors() {
if (StringUtils.isEmpty(ports)){
return null;
}
String[] port = ports.split(",");
List<Connector> connectors = new ArrayList<>();
for (String s : port) {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(Integer.parseInt(s));
connector.setScheme("http");
connector.setRedirectPort(8041);
connectors.add(connector);
}
return connectors.toArray(new Connector[]{});
}