我有一个小的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);
        }
    });

10-05 19:18