当前位置: 首页 > 知识库问答 >
问题:

在具有完全未来的循环中从db获取结果

常枫涟
2023-03-14

我使用的是SpringBoot和SpringDataJPA,我有一个逻辑,它由3个数据库请求组成,我想并行运行。我想在将来用于此目的。

最后,我需要从5 db查询运行的结果中构建响应对象

所以我创造了完全未来

CompletableFuture<Long> totalFuture = CompletableFuture.supplyAsync(() ->  myRepository.getTotal());

CompletableFuture<Long> countFuture = CompletableFuture.supplyAsync(() ->  myRepository.getCount());

那我打算用。与这个未来无关。但我对循环调用有问题。如何重写它以在每个请求中使用callable,我需要从请求中传递值,然后按键排序到map中?

Map<String, Integer> groupcount = new HashMap<>();
    request.ids().forEach((key, value) -> count.put(key, myRepository
            .getGroupCountId(value));

共有1个答案

江烨伟
2023-03-14

为了更全面地解释,我发布了一个代码片段,我想链接它,但现在它是这样工作的。

List<CompletableFuture<Void>> completableFutures = new ArrayList<>();
Map<String, Integer> groupcount = new ConcurrentHashMap<>();
        for (var id : request.Ids().entrySet()) {
            completableFutures.add(
                CompletableFuture.runAsync(someOperation, EXECUTOR_SERVICE)
                    .thenApply(v -> runQuery(v.getValues))
                    .thenAcceptAsync(res-> groupcount .put(v.key, res));
        }
CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0])).get();
 类似资料:
  • 我正在为给定的主键查询Dynamo DB。主键由两个UUID字段(fieldUUID1、fieldUUID2)组成。对于上面的主键组合和值列表,我有很多查询要执行。为此,我使用异步CompletableFuture和ExecutorService,线程池大小为4。 在所有查询返回结果之后,这是

  • 我试图用async CompletableFuture创建一个简单的示例,但我看到了一些奇怪的行为。我的想法是启动两个异步未来,一个在设定时间后激活布尔标志,另一个轮询该标志,在线程1更改该标志后释放该值。这是我的代码: 而CF类: 当我让程序运行它的课程时,它会打印以下内容: 获取可完成的 开始睡觉 睡过了 进程已完成,退出代码为0 i、 e.未来永远不会在分配的10秒内完成。这是怎么回事?

  • 我有两个不同的CompletableFuture,我喜欢并行运行(每个都有不同的返回类型),然后结合它们的结果: 现在我喜欢把dog.name 我想用 但我在这里很烂。

  • 问题内容: 所以基本上我创建了一个循环,该循环从数组中获取值,然后使用youtube api将这些值放入一个循环中。如果我从循环内访问youtube链接,则工作正常,但在循环外“(当我运行console.log({urllist})”时,我得到一个空数组。我要做的就是推送所有值放入urllist空数组,然后将其传输到状态变量(“ videos”) 我要指的功能是videoUrls 问题答案: 您的

  • 但是,testCase2不处理异常并引发错误。我是不是漏掉了什么?抱歉,我是新手。

  • 我有如下代码: ,我需要能够将结果resultOne和resultTwo放在一起,这样对于每次迭代,在完成整个同步执行时,我有一个(我猜)数组或映射,我可以随后处理,其中数组中的一个对象有相应的id,该id有一个true或false(表示两个布尔值与单独对象的和)。 根据读者的反馈,我已经完成了代码,可以合并两个原始期货,并组合每次迭代的所有结果以获得整个期货循环。此时我只需要处理结果。 我想也许