繁体   English   中英

jOOQ异步批量插入

[英]jOOQ asynchronous batch insert

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

dslContext.batchInsert(myListOfRecords).execute()

然而,这是同义词。 jOOQ 有很多其他的异步 API,有没有一个用于批量插入的?

如果没有,简单地将调用包装在CompletableFuture execute是否安全?

从 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 IMO CompletableFuture设计中的一个重大错误。
  2. 它将同步执行( this::execute )包装在一个blocking()包装器中,它方便地将逻辑包装在ForkJoinPool.managedBlock() ForkJoinPool运行阻塞工作时推荐这样做

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM