springboot 项目监听多个端口

步骤:

1.在配置文件添加

#端口设置 server.port=8088 server.additionalPorts: 8089,8090

2.编写ApplicationConfig.class类

import org.apache.catalina.connector.Connector; import org.springframework.boot.web.embedded.tomcat.*; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;

import java.util.ArrayList; import java.util.List;

@Configuration public class ApplicationConfig {

@Value("${server.additionalPorts}") private String additionalPorts;

@Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); Connector[] additionalConnectors = this.additionalConnector(); if (additionalConnectors != null && additionalConnectors.length > 0) { tomcat.addAdditionalTomcatConnectors(additionalConnectors); } return tomcat; }

private Connector[] additionalConnector() { if (this.additionalPorts==null) { return null; } String[] ports = this.additionalPorts.split(","); List<Connector> result = new ArrayList<>(); for (String port : ports) { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(Integer.valueOf(port)); result.add(connector); } return result.toArray(new Connector[] {}); } }

3.启动类添加注解

@Import({ApplicationConfig.class})

4.启动项目,可监听多个端口

5.控制器根据端口号做响应设置

例: import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/") @RestController public class PayController {

//-----------------------测试---------------------------- @RequestMapping("/a") public String a(HttpServletRequest request) { int port=request.getServerPort(); if(port==8088) { return "b"; } if(port==8089) { return "c"; } if(port==8090) { return "d"; } return "a"; } }

经验分享 程序员 微信小程序 职场和发展