带有CompletableFuture的Spring boot异步调用,异常处理

问题描述 投票:0回答:1

我有一个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方法的部分结果。我应该怎么做?

谢谢!

spring-boot asynchronous parallel-processing completable-future
1个回答
0
投票

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方法将导致完成,您可以在获取单个期货时过滤导致异常的那个。

© www.soinside.com 2019 - 2024. All rights reserved.