步骤:
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";
}
}