我有一个小的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);
}
但现在它只是等待异步调用结束。有没有办法让异步方法过它的生命,并在它完成存储这个completition错误之后?
答案 0 :(得分:1)
您需要附加回调。如果您使用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);
}
});