Spring MVC Controller如何等待所有异步WebClient请求完成?

时间:2019-02-22 19:15:14

标签: java spring spring-mvc asynchronous spring-webflux

我正在尝试在Spring 5 Web MVC应用程序中使用WebClient。我的控制器返回一个JSP视图,因此在将响应呈现给用户之前,我需要等待所有异步调用完成。示例:

   @RequestMapping(value="asyncCalls",method = RequestMethod.GET)
    public String start(Map<String,Object> Model)
    {
        Mono<String> webClientResA = webClient.get().retrieve().bodyToMono(String.class);
        Mono<String> webClientResB = webClient.get().retrieve().bodyToMono(String.class);
        Mono<String> webClientResC = webClient.get().retrieve().bodyToMono(String.class);

        webClientResA.subscribe(res->{model.add(res);});`
        webClientResB.subscribe(res->{model.add(res);});
        webClientResC.subscribe(res->{model.add(res);});

        //database queries, etc.

        return "homeJSP/home";
    }`

在渲染视图之前,我需要让主请求线程等待所有对象都进入模型。我能想到的唯一方法是实例化CountDownLatch(3)并在每个订阅lambda中调用latch.countDown()并在返回之前调用latch.await()。但是,在标准的Servlet环境中,还有其他更可接受​​的方法吗?

谢谢

0 个答案:

没有答案