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"; } }
