java - 如何检索@Async方法的结果

标签 java spring asynchronous

我有一个小型 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/

相关文章:

java - 在 Java 项目中运行示例代码

java - 如何使用 JSTL sql :query? 访问重复的列名

java - 当已经通过 ldap Spring 3.0 进行身份验证时,如何获取 Active Directory 组?

spring - Spring @Retryable 中针对不同异常的不同重试尝试

javascript - 使用 JavaScript 异步代替 setInterval

android - 多个http请求的架构

java - 根据正在序列化的类修改对象序列化

java - Spring Boot - Stomp : '.' vs '/' in Message Destination

c# - 异步读取文件的正确方法

Spring security jdbcAuthentication 不适用于默认角色处理