我正在使用Spring Boot 2
尝试使用Spring 5进行一些反应式编程。我创建了一些标准的MVC控制器。
@RestController
@RequestMapping("/judge/rest")
public class BasicController {
private static final Logger LOGGER = LoggerFactory.getLogger(BasicController.class);
@GetMapping("/hello")
public Mono<String> handle() {
LOGGER.debug("Invoking hello controller");
return Mono.just("Hello WebFlux");
}
}
标准路由器功能。
@Configuration
public class WebConfig {
@Bean
public RouterFunction<?> helloRoute() {
return route(GET("/judge/router/hello"),
request -> ServerResponse.ok().body(fromPublisher(Mono.just("Hello Router WebFlux"), String.class)));
}
}
我的主要春季启动应用程序如下所示
@SpringBootApplication
public class JudgeRuleEngineApplication {
public static void main(String[] args) {
SpringApplication.run(JudgeRuleEngineApplication.class, args);
}
}
但是在第5春季的文档中,我遇到了
HttpHandler httpHandler = RouterFunctions.toHttpHandler(route);
ReactorHttpHandlerAdapter adapter =
new ReactorHttpHandlerAdapter(httpHandler);
HttpServer server = HttpServer.create("localhost", 8080);
server.startAndAwait(adapter);
似乎服务器是手动实例化的。
我的问题是我何时应该像这样实例化服务器?因为到目前为止它似乎与@SpringBootApplication
和main
一起处理请求就好了。
答案 0 :(得分:1)
正如文件所说
现在只缺少一个难题:运行路由器 功能在HTTP服务器中。您可以将路由器功能转换为 HttpHandler使用RouterFunctions.toHttpHandler(RouterFunction)。 HttpHandler允许您运行各种各样的反应 运行时:Reactor Netty,RxNetty,Servlet 3.1+和Undertow。
这意味着您显示的上述代码使用Reactor Netty作为响应式运行时。如果您希望使用具有反应式本机适配器的任何其他运行时,您可以这样做。在这种情况下,您可以像这样实例化服务器。
默认情况下,Spring启动默认为Reactor Netty。