Вам не нужно вручную запускать сервер в приложении Spring Boot, вы можете просто объявить свой RouterFunction
как @Bean
следующим образом:
@Bean
public RouterFunction<ServerResponse> hello() {
return route(GET("/hello"),
request -> {
Mono<String> hi = Mono.just("hi");
return ServerResponse.ok().contentType(TEXT_PLAIN).body(hi, String.class);
});
}
Spring Boot защищает вас отбазовые изменения API на поддерживаемых серверах.
Основной метод здесь не похож на типичный основной метод Spring Boot, поэтому я не думаю, что вы на самом деле используете Spring Boot здесь.В любом случае, вот фрагмент кода, который решает вашу проблему;начиная с Reactor Netty 0.8, часть bind()
отделена от фактической ожидающей части:
RouterFunction<?> route = RouterFunctions.route(RequestPredicates.GET("/hello"),
request -> {
Mono<String> hi = Mono.just("hi");
return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).body(hi, String.class);
});
HttpHandler httpHandler = RouterFunctions.toHttpHandler(route);
ReactorHttpHandlerAdapter adapter =
new ReactorHttpHandlerAdapter(httpHandler);
HttpServer server = HttpServer.create().host("localhost").port(8080);
DisposableServer disposableServer = server.handle(adapter).bind().block();
disposableServer.onDispose().block();