我有一个小型 Spring Boot 应用程序等待 REST 调用来启动异步作业。然而,我接下来想做的是获取这些异步作业的结果并将它们存储在数据库中。但我不知道如何异步使用 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
类(class)。
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);
}
});
关于java - 如何检索@Async方法的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33216896/