如何在Spring Boot 2(带有WebFlux)中为HTTP和HTTPS配置两个端口?

Jue*_*ann 5 spring-boot spring-webflux

谁能告诉我使用Spring Boot 2和WebFlux时如何配置2个端口(用于HTTP和HTTPS)?任何提示表示赞赏!

jzh*_*aux 6

Spring Boot 2尚不直接支持功能

但是,您可能可以通过两种方式使它工作。

默认情况下,Spring Boot WebFlux使用Netty。如果您已经为ssl配置,那么Spring Boot将启动并打开端口8443(或任何您已配置的端口)。

然后,要添加8080,您可以执行以下操作:

@Autowired
HttpHandler httpHandler;

WebServer http;

@PostConstruct
public void start() {
    ReactiveWebServerFactory factory = new NettyReactiveWebServerFactory(8080);
    this.http = factory.getWebServer(this.httpHandler);
    this.http.start();
}

@PreDestroy
public void stop() {
    this.http.stop();
}
Run Code Online (Sandbox Code Playgroud)

由于您的https配置位于一个位置(application.yml),而您的http配置位于Java配置中,所以这有点笨拙,但是我已经用一个玩具应用程序对此进行了测试。不过,不确定该解决方案的稳定性如何。

可能可行的另一种选择是尝试其他建议的等效方法,但使用类的响应版本,即TomcatReactiveWebServerFactory。我不知道有任何方法可以为其提供多个连接器,但是您可以覆盖其getWebServer方法:

@Bean
TomcatReactiveWebServerFactory twoPorts() {
    return new TomcatReactiveWebServerFactory(8443) {
        @Override
        public WebServer getWebServer(HttpHandler httpHandler) {
           // .. copy lines from parent class
           // .. and add your own Connector, similar to how tutorials describe for servlet-based support
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另外,有点混乱,我自己也没有尝试过这种方法。

当然,请跟踪该票证,以便您知道何时Spring Boot 2提供官方支持。


小智 0

实际上,您可以按照此处所述定义第二个连接器。因此,您可以将 https 连接器定义为默认连接器,并定义一个附加的 HTTP 连接器