我有一个Spring Boot服务,其中的一些代码如下,用于并行异步调用:
CompletableFuture future1 = accountManager.getResult(url1);
CompletableFuture future2 = accountManager.getResult(url2);
CompletableFuture.allOf(future1,future2).join();
String result1 = future1.get();
String result2 = future2.get();
没有例外,它工作正常。我的问题是如何处理异常?如果获取future1失败(假设url2是无效的url),我仍然希望将future2作为allOf方法的部分结果。我应该怎么做?
谢谢!
CompletableFuture带有一个名为exclusive()的块,可用于处理异步代码块内发生的异常。 getResult方法的片段供您参考,
public CompletableFuture<String> getGreeting(String url) {
return CompletableFuture.supplyAsync( () -> {
return // Business logic..
}, executor).exceptionally( ex -> {
log.error("Something went wrong : ", ex);
return null;
});
}
在这种情况下,如果发生异常,该块将返回null,而allOf方法将导致完成,您可以在获取单个期货时过滤导致异常的那个。