我有一个小的Spring Boot应用程序,等待REST调用以启动异步作业。但是,我接下来要做的是获取这些异步作业的结果并将其存储在DB中。但是我不知道如何异步使用Future返回的对象。
这或多或少是我所拥有的:
@RequestMapping("/vlan/{id}/{name}")
public void performVLANConfig(@PathVariable("id") int id, @PathVariable("name") String name) {
logger.debug("Received req");
Future<ProcessedRequest> processedRequestFuture= asyncService.processVlan(id, name);
processedRequestRepository.save(processedRequest);
}
但是现在它只是等待异步调用结束。有什么方法可以让异步方法继续运行并在完成后存储此完成错误?
最佳答案
您需要附加一个回调。如果使用Future
,则无法将回调附加到该回调,而是将其分配给ListenableFuture
,该服务当然需要返回ListenableFuture
。
ListenableFuture<ProcessedRequest> future = asyncService.processVlan(id, name);
future.addCallback(new ListenableFutureCallback<ProcessedRequest>() {
@Override
public void onFailure(Throwable throwable) {
// deal with it
}
@Override
public void onSuccess(ProcessedRequest processedRequest) {
processedRequestRepository.save(processedRequest);
}
});