我正在尝试使用两个不同的端口在Spring Boot中配置应用程序,但是我还没有停下来。我的第一个替代方法是使用两个控制器,我在两个控制器中使用container.setPort(8080);定义了一个@Bean。我的第二个替代方法是添加执行器依赖性并更改管理端口,但我的应用程序无法运行。“地址已在使用中:绑定”,如何配置具有两个端口的应用程序?我想要一个端口用于管理,而另一个端口则用于查询我的api。
正如前面已经提到的,server.port并management.port沿management.context-path特性可以被设置为使嵌入容器监听不同的端口(管理相关的属性来访问Actuator端点)。
server.port
management.port
management.context-path
要侦听除server.port和以外的端口management.port:
@Configuration public class EmbeddedTomcatConfiguration { @Value("${server.additionalPorts}") private String additionalPorts; @Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory(); Connector[] additionalConnectors = this.additionalConnector(); if (additionalConnectors != null && additionalConnectors.length > 0) { tomcat.addAdditionalTomcatConnectors(additionalConnectors); } return tomcat; } private Connector[] additionalConnector() { if (StringUtils.isBlank(this.additionalPorts)) { 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[] {}); } }
application.yml
server: port: ${appPort:8800} additionalPorts: 8881,8882
应用程序
@SpringBootApplication @ComponentScan(...) @Import(EmbeddedTomcatConfiguration.class) public Application { public static void main(String[] args) { SpringApplication.run(Application .class, args); } }