有人能告诉我在使用Spring Boot 2和WebFlux时如何配置2个端口(用于HTTP和HTTPS)?任何提示都表示赞赏!
答案 0 :(得分:5)
此isn't directly supported by Spring Boot 2 yet。
但是,您可能可以通过两种方式使它工作。
默认情况下,Spring Boot WebFlux使用Netty。如果已经配置了for 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();
}
这有点笨拙,因为您的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
}
}
}
也有点混乱,我自己也没有尝试过这种方法。
当然,请跟踪the ticket,以便您知道Spring Boot 2何时提供官方支持。
答案 1 :(得分:1)
按照jojo_berlin (here's the link)提供的链接中列出的说明操作。不过使用他的EmbeddedTomcatConfiguration类,请使用下面的
@Configuration
public class TomcatConfig {
@Value("${server.http.port}")
private int httpPort;
@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setPort(httpPort);
factory.addAdditionalTomcatConnectors(connector);
return factory;
}
}
答案 2 :(得分:0)
实际上,您可以按照here所述定义第二个连接器。因此,您可以将https连接器定义为默认连接器和其他HTTP连接器