谁能告诉我当使用Spring Boot2和WebFlux时,如何配置2个端口(用于HTTP和HTTPS)?任何提示都是值得感谢的!
发布于 2018-08-31 05:34:04
这个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 config中,但我自己用一个玩具应用程序测试了这一点。不过,我不确定它的解决方案有多健壮。
另一个可能可行的选择是尝试其他建议的等价物,但使用类的反应式版本,即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 Boot2何时提供官方支持。
发布于 2018-03-08 01:31:29
按照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;
}
}
发布于 2018-01-12 16:40:26
实际上,您可以定义第二个连接器,如here所述。因此您可以将https连接器定义为默认连接器,并将其定义为附加HTTP连接器
https://stackoverflow.com/questions/48221194
复制相似问题