如何检索@Async方法

时间:2015-10-19 14:21:16

标签: java spring asynchronous

我有一个小的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错误之后?

1 个答案:

答案 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);
        }
    });