代码之家  ›  专栏  ›  技术社区  ›  Nguyen Andrew

为什么CompletableFuture不在Spring引导中调用API?

  •  0
  • Nguyen Andrew  · 技术社区  · 1 年前

    我正在使用CompletableFuture同时进行多个API调用,以减少用户等待时间。 这是我的代码:

    @Async
        public CompletableFuture<CommonDataDTO> commonData() throws JsonProcessingException, ExecutionException, InterruptedException {
            CompletableFuture<UserDTO[]> completableFutureUser = CompletableFuture.supplyAsync(() -> {
                try {
                    return  apiHelper.getEmployee();
                } catch (JsonProcessingException e) {
                    return new UserDTO[0];
                }
            });
            CompletableFuture<ContactDTO[]> completableFutureContact = CompletableFuture.supplyAsync(() -> {
                try {
                    return  apiHelper.getTravelAgent();
                } catch (JsonProcessingException e) {
                    return new ContactDTO[0];
                }
            });
            CompletableFuture<CurrencyRateDTO[]> completableFutureCurrency = CompletableFuture.supplyAsync(() -> apiHelper.getCurrencyRate("site"));
    
            return CompletableFuture.allOf(completableFutureUser, completableFutureContact, completableFutureCurrency).thenApply(v -> {
                return new CommonDataDTO(Arrays.stream(completableFutureUser.join()).toList(), Arrays.stream(completableFutureContact.join()).toList(), Arrays.stream(completableFutureCurrency.join()).toList());
            });
        }
    
    

    但当我运行上面的代码时,我会收到一条错误消息,如下所示:

    java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.
    
    

    我补充道 @EnableAsync 到Application类。

    我是不是做错了什么? 非常感谢

    我试着用康平代替allOf,但一切都一样

    0 回复  |  直到 1 年前