marcobug
marcobug

Reputation: 1

Spring boot async call with CompletableFuture, exception handling

I have a Spring boot service with some code like below for parallel async call:

CompletableFuture future1 = accountManager.getResult(url1);

CompletableFuture future2 = accountManager.getResult(url2);

CompletableFuture.allOf(future1, future2).join();

String result1 = future1.get();

String result2 = future2.get();

It works fine when there is no exception. My question is how to handle exception? If getting future1 failed (let say url2 is an invalid url), I still want future2 back as partial result of allOf method. How should I do it?

Thanks!

Upvotes: 0

Views: 1212

Answers (1)

Vignesh T I
Vignesh T I

Reputation: 872

CompletableFuture comes with a block called exceptionally() which can be used handle the exceptions happen inside the asynchronous code block. Snippet of getResult method for your reference,

public CompletableFuture<String> getGreeting(String url) {
    return CompletableFuture.supplyAsync( () -> {

       return // Business logic..
    }, executor).exceptionally( ex -> {
       log.error("Something went wrong : ", ex);
       return null;
    }); 
}

In this case the block would return null in case of exception and allOf method would lead to a completion where you can filter the one resulted in the exception when you fetch individual futures.

Upvotes: 1

Related Questions