gpt4 book ai didi

java - jOOQ异步批量插入

转载 作者:行者123 更新时间:2023-11-30 05:17:48 26 4
gpt4 key购买 nike

我想将大量行插入我的数据库。我已经看到 jOOQ 有批处理支持,所以我可以执行以下操作:

dslContext.batchInsert(myListOfRecords).execute()

但是,这是同义词。 jOOQ还有很多其他的异步API,有没有一个可以批量插入呢?

如果不是,简单地将对 execute 的调用包装在 CompletableFuture 中是否安全?

最佳答案

从 jOOQ 3.12 开始,org.jooq.Batch 类型上确实缺少这些 executeAsync() 方法。请参阅:https://github.com/jOOQ/jOOQ/issues/9806

但是,他们并没有做任何魔法。如果您查看 AbstractQuery.executeAsync(Executor) 的实现,您会发现它正在执行以下操作(从 jOOQ 3.12 开始):

@Override
public final CompletionStage<Integer> executeAsync(Executor executor) {
return ExecutorProviderCompletionStage.of(
CompletableFuture.supplyAsync(blocking(this::execute), executor), () -> executor
);
}

jOOQ 做的两件事您可能不需要自己做:

  1. 它将 CompletableFuture 包装在一个代理中,该代理保留对您的 Executor 的引用,以便在该执行器上运行后续任务。默认返回到常见的ForkJoinPool。在我看来,CompletableFuture 的设计存在重大错误。
  2. 它将同步执行 (this::execute) 包装在 blocking() 包装器中,该包装器可以方便地将逻辑包装在 ForkJoinPool.managedBlock()。在 ForkJoinPool
  3. 中运行阻塞工作时建议这样做

关于java - jOOQ异步批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60099753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com