springboot 如何启动多个Tomcat容器?
在 Spring Boot 中启动多个 Tomcat 容器有以下几种常见方法:
继承TomcatEmbeddedServletContainerFactory
- 创建配置类:创建一个配置类,继承
TomcatEmbeddedServletContainerFactory,重写getTomcatEmbeddedServletContainer方法来定制 Tomcat 容器。
java
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MultipleTomcatConfig {
@Bean
public ServletWebServerFactory servletContainer1() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
// 配置安全约束等
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
factory.addAdditionalTomcatConnectors(httpConnector1());
return factory;
}
@Bean
public ServletWebServerFactory servletContainer2() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.addAdditionalTomcatConnectors(httpConnector2());
return factory;
}
private Connector httpConnector1() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(8080);
return connector;
}
private Connector httpConnector2() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(8081);
return connector;
}
}
使用@Configuration和@Bean
- 配置类定义:在配置类中,使用
@Bean注解定义多个TomcatWebServerbean,每个 bean 代表一个 Tomcat 容器。
java
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MultipleTomcatConfig {
@Bean
public ServletWebServerFactory tomcatWebServerFactory1() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
connector.setPort(8080);
connector.setProtocol(Http11NioProtocol.class.getName());
});
return factory;
}
@Bean
public ServletWebServerFactory tomcatWebServerFactory2() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
connector.setPort(8081);
connector.setProtocol(Http11NioProtocol.class.getName());
});
return factory;
}
}
在application.properties中配置
- 多端口配置:在
application.properties文件中,可以通过配置不同的端口来启动多个 Tomcat 容器。
properties
server.port=8080
server.servlet.context-path=/app1
server.tomcat.additional-connectors[0].port=8081
server.tomcat.additional-connectors[0].protocol=org.apache.coyote.http11.Http11NioProtocol
server.tomcat.additional-connectors[0].redirect-port=8443
server.tomcat.additional-connectors[0].connection-timeout=20000
server.tomcat.additional-connectors[0].max-connections=1000
server.tomcat.additional-connectors[0].max-threads=200
server.servlet.context-path=/app2
以上代码示例只是基本配置,实际应用中可根据需求进一步调整和扩展。
摘抄自网络,便于检索查找。

浙公网安备 33010602011771号