Giriş
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
import org.springframework.util.concurrent.ListenableFuture;
- Sanırım Java 8'den itibaren bu sınıf yerine CompletableFuture nesnesini kullanmak daha iyi. - Bu sınıf Guava kütüphanesindeki com.google.common.util.concurrent.ListenableFuture arayüzünden ilham alınarak geliştirilmiş.
addCallback metodu - ListenableFutureCallback
addCallback metodu - ListenableFutureCallback
ListenableFutureCallback arayüzünde onSuccess() ve onFailure() metodları var. Bu metodlar, gerçek işi yapan yani Future nesnesini complete olarak işaretleyen thread tarafından çalıştırılıyor. Açıklaması şöyle
For others who might have the same question i want to add the observed behavior (not officially documented AFAIK, if not folks can correct & point me to it).The observed behavior as i suspected is that they are being executed by the thread that completes the future.It would have been nice if the spring implementation had provided the same support as the guava one, but as it stands the above behavior is what we have.
Örnek
Şöyle yaparız.
Elimizde şöyle bir kod olsun.
ListenableFuture nesnesini Java 8 ile gelen CompletableFuture nesnesine dönüştürür.
Şöyle yaparız.
ListenableFuture<MyEntity> future = ...;
future.addCallback(it -> {
System.out.println("Pass");
}, throwable -> {
System.out.println("fail");
});
ÖrnekElimizde şöyle bir kod olsun.
public class ResponseCallBack<T> implements ListenableFutureCallback<ResponseEntity<T>>{
@Override
public void onSuccess(ResponseEntity<T> stringResponseEntity) {
...
}
@Override
public void onFailure(Throwable ex) {
...
}
}
Şöyle yaparız.ResponseCallBack responseCallBack = ...;
ListenableFuture restCall = ...;
restCall.addCallback(responseCallBack);
toCompletableFuture metoduListenableFuture nesnesini Java 8 ile gelen CompletableFuture nesnesine dönüştürür.
Örnek
Şöyle yaparız.
@GetMapping(value = "/asyncNonBlockingRequestProcessing")
public CompletableFuture<String> asyncNonBlockingRequestProcessing(){
ListenableFuture<String> listenableFuture = getRequest.execute(
new AsyncCompletionHandler<String>() {
@Override
public String onCompleted(Response response) throws Exception {
logger.debug("Async Non Blocking Request processing completed");
return "Async Non blocking...";
}
});
return listenableFuture.toCompletableFuture();
}
Hiç yorum yok:
Yorum Gönder