2017-04-11 16 views
0

休憩の呼び出しにSpring AsyncRestTemplateを使用するサービスがあります。 AsyncRestTemplate.exchange()の各コールはListenableFutureを返します。このような何か:Springを待つListenableFuture

ListenableFuture future1 = new AsyncRestTemplate().exchange(...); 
    ListenableFuture future2 = new AsyncRestTemplate().exchange(...); 
    ListenableFuture future3 = new AsyncRestTemplate().exchange(...); 

は、他のすべてのコールを組み合わせた単一ListenableFutureを作成するための方法はありますか? GuavaのFutures.allAsListのようなもの。

+3

あなたの最善の策は、次のようにアダプタを使用することですこの1つ:[Future Converter](https://github.com/lukas-krecan/future-converter) –

答えて

1

ステップ#1:CompletableFuture

に各ListenableFuture変換
public CompletableFuture<T> toCompletableFuture(ListenableFuture<ResponseEntity<String>> listenableFuture) { 
    final CompletableFuture<T> completableFuture = new CompletableFuture<>(); 

    listenableFuture.addCallback(new ListenableFutureCallback<ResponseEntity<String>>() { 
     @Override 
     public void onFailure(Throwable e) { 
      completableFuture.completeExceptionally(e); 
      } 
     } 

     @Override 
     public void onSuccess(ResponseEntity<String> result) { 
      completableFuture.complete(parseResponse(result)); 
      } 
     } 
    }); 
    return completableFuture; 
} 

ステップ#2:呼び出しCompletableFuture.allOf(CF1、CF2、CF3 ...)

+1

春5にはorg.springframework.util.concurrent.ListenableFutureがあります。同じことをする完了可能なメソッドです。 – destan