[英]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 做的两件事你可能不需要自己做:
CompletableFuture
包装在一个代理中,该代理保留对您的Executor
的引用,以便也在该执行器上运行后续任务,而不是默认返回到公共ForkJoinPool
。 IMO CompletableFuture
设计中的一个重大错误。this::execute
)包装在一个blocking()
包装器中,它方便地将逻辑包装在ForkJoinPool.managedBlock()
。 在ForkJoinPool
运行阻塞工作时推荐这样做
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.