Spring boot asyn c вызов с CompletableFuture, обработка исключений - PullRequest
0 голосов
/ 28 мая 2020

У меня есть служба загрузки Spring с некоторым кодом, как показано ниже, для параллельного asyn c call:

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. Как мне это сделать?

Спасибо!

1 Ответ

1 голос
/ 28 мая 2020

CompletableFuture поставляется с блоком, называемым exceptionally (), который можно использовать для обработки исключений, происходящих внутри блока асинхронного кода. Фрагмент метода 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 приведет к завершению, где вы можете отфильтровать тот, который привел к исключению при извлечении индивидуальные фьючерсы.

...