【问题标题】:Using SpringFrameWork @Async for methods that return void对返回 void 的方法使用 SpringFrameWork @Async
【发布时间】:2015-11-27 17:44:00
【问题描述】:

我使用 Spring Boot 框架作为我的后端。

这是我想要异步执行的调用之一 - 它只是将用户保存到我的 mongoDB 数据库中:

@Async
public Future<Void> saveUser(String userid) {
    User user = new User();
    user.setUserId(userid);
    return new AsyncResult<Void>(mongoTemplate.save(user));
}

该方法给了我一个错误,因为 mongoTemplate.save(user) 返回一个 void 值而不是 Void 对象。

我尝试通过替换void 来更改方法,但它不起作用,因为Future&lt;void&gt;AsyncResult&lt;void&gt; 不被接受:

@Async
public Future<void> saveUser(String userid) {
    User user = new User();
    user.setUserId(userid);
    return new AsyncResult<void>(mongoTemplate.save(user));
}

有没有办法在 Spring 上运行以异步方式返回 void 的方法?

【问题讨论】:

    标签: java spring mongodb asynchronous


    【解决方案1】:

    尝试以下方法:

    @Async
    public void saveUser(String userid) {
        User user = new User();
        user.setUserId(userid);
        mongoTemplate.save(user);
    }
    

    只有当返回类型不是void时才需要使用Future。

    【讨论】:

      【解决方案2】:

      Void 的唯一值是null。所以你只需要

      User user = new User();
      user.setUserId(userid);
      mongoTemplate.save(user)
      return new AsyncResult<Void>(null);
      

      【讨论】:

        【解决方案3】:

        直接返回

        return new AsyncResult<>(null);
        

        【讨论】:

          猜你喜欢
          • 2013-05-12
          • 1970-01-01
          • 1970-01-01
          • 2011-12-05
          • 2015-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多