在Spring Framework 5和Spring Boot 2

时间:2018-02-17 10:50:38

标签: spring spring-boot

我正在使用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);

似乎服务器是手动实例化的。

我的问题是我何时应该像这样实例化服务器?因为到目前为止它似乎与@SpringBootApplicationmain一起处理请求就好了。

1 个答案:

答案 0 :(得分:1)

正如文件所说

  

现在只缺少一个难题:运行路由器   功能在HTTP服务器中。您可以将路由器功能转换为   HttpHandler使用RouterFunctions.toHttpHandler(RouterFunction)。   HttpHandler允许您运行各种各样的反应   运行时:Reactor Netty,RxNetty,Servlet 3.1+和Undertow。

这意味着您显示的上述代码使用Reactor Netty作为响应式运行时。如果您希望使用具有反应式本机适配器的任何其他运行时,您可以这样做。在这种情况下,您可以像这样实例化服务器。

默认情况下,Spring启动默认为Reactor Netty。