我正在使用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,但一切都一样