使用两个端口配置Spring引导

使用两个端口配置Spring引导,spring,spring-boot,spring-boot-actuator,Spring,Spring Boot,Spring Boot Actuator,我正在尝试用两个不同的端口在Spring Boot中配置一个应用程序,但我还没有找到。 我的第一个近似是关于两个控制器的,我在两个控制器内用container.setPort(8080)定义了一个@Bean; 我的第二个建议是添加执行器依赖项并更改管理器的端口,但我的应用程序不运行。“地址已在使用:绑定”, 如何使用两个端口配置应用程序?我希望一个端口用于管理,另一个端口用于咨询我的api。要更改执行器管理端口,可以使用属性 management.port=8081 请参阅完整的属性列表 更新

我正在尝试用两个不同的端口在Spring Boot中配置一个应用程序,但我还没有找到。 我的第一个近似是关于两个控制器的,我在两个控制器内用container.setPort(8080)定义了一个@Bean; 我的第二个建议是添加执行器依赖项并更改管理器的端口,但我的应用程序不运行。“地址已在使用:绑定”,
如何使用两个端口配置应用程序?我希望一个端口用于管理,另一个端口用于咨询我的api。

要更改执行器管理端口,可以使用属性

management.port=8081
请参阅完整的属性列表

更新: 在本例中,执行器创建了一个以上的嵌入式Tomcat(servlet容器)实例。
请参阅和

如前所述,
服务器.端口
管理.端口
以及
管理。可以设置上下文路径
属性,使嵌入式容器侦听不同的端口(访问
执行器
端点的管理相关属性)

要在服务器端口和管理端口以外的端口上侦听,请执行以下操作:

@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.java

@SpringBootApplication
@ComponentScan(...)
@Import(EmbeddedTomcatConfiguration.class)
public Application {

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

我最近在

上写了关于这个主题的博客,因为springboot 2中提到的EmbeddedServletContainerFactory不再可用,所以您应该根据您的上下文使用
TomcatServletWebServerFactory
TomcatReactiveWebServerFactory

除工厂注射外,溶液保持不变:

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

要在单个项目中运行2个或多个应用程序或更改默认端口,可以执行如下操作

@SpringBootApplication
public class NewApplication {
     public static void main(String[] args) {
         SpringApplication app = new SpringApplication(NewApplication .class);
         app.setDefaultProperties(Collections.singletonMap("server.port", "8083"));
         app.run(args);
     }
}

是的,我知道,但是可以这样做:management.port=8081和server.port=8080吗?并且在同一应用程序中有两个不同的端口?默认情况下,7服务器端口为8080。2个不同的端口意味着2个不同的套接字监听不同的端口。谢谢,我知道这是可能的,但我们不希望在执行器端口中有我们的管理应用程序,我们需要一个不同的端口。此外,还有SpringBoot2.0的修改-现在如何区分localhost:port1->admin的服务索引页localhost:port2->其他服务器的服务索引页
@SpringBootApplication
public class NewApplication {
     public static void main(String[] args) {
         SpringApplication app = new SpringApplication(NewApplication .class);
         app.setDefaultProperties(Collections.singletonMap("server.port", "8083"));
         app.run(args);
     }
}