Spring Boot中为Tomcat配置多个监听端口

今天有同事问”Spring Boot依赖的Embedded的Tomcat能不能同时监听多个端口?“

stand-alone的tomcat当然是可以的,Tomcat的架构中,一个Connecter监听一个端口。 如果是stand-alone的Tomcat,只需要在server.xml中添加一个即可,如下:

<Connector port="8080" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" />
<Connector port="8081" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" />
<Connector port="8082" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" />

上面配置了3个Connector,分别监听 8080,8081,8082 3个端口。

Spring Boot使用了Embedded Tomcat,同时提供了EmbeddedServletContainerCustomizer接口让用户对各种EmbeddedServletContainer进行配置。 该接口只要一个方法:

public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer)

ConfigurableEmbeddedServletContainer接口代表了可配置的EmbeddedServletContainer。 这个接口有如下实现:

TomcatEmbeddedServletContainerFactory就是我们需要的类。 TomcatEmbeddedServletContainerFactory#addAdditionalTomcatConnectors(Connector connector) 可以为Tomcat开启多个端口。 核心代码如下:

@SpringBootApplication
public class TomcatConfigApplication implements EmbeddedServletContainerCustomizer {

	public static void main(String[] args) {
		SpringApplication.run(TomcatConfigApplication.class, args);
	}

	@Value("${server.additional-ports}")
	String ports;

@Override
public void customize(
ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {

if (ports != null) {
// 判断如果是Tomcat才进行如下配置
if (configurableEmbeddedServletContainer instanceof TomcatEmbeddedServletContainerFactory) {
	// 转类型为TomcatEmbeddedServletContainerFactory
	TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) configurableEmbeddedServletContainer;

	String[] portsArray = ports.split(",");
	for (String portStr : portsArray) {
		int port = Integer.parseInt(portStr);
		// Tomcat中,一个Connecter监听一个端口
		// 指定协议为HTTP/1.1
		Connector httpConnector = new Connector("HTTP/1.1");
		httpConnector.setPort(port);
		tomcat.addAdditionalTomcatConnectors(httpConnector);
	}
}
}
}
}

 

 

 

 

测试一下:

 

启动日志里会显示

2017-10-31 21:48:14.961 INFO 81863 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 8081 (http) 8082 (http) 8083 (http)

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值