使用spring数据jdbc的多线程事务性插入



我使用NamedParameterJdbcTemplate。我需要在一个事务中向5个不同的表插入数据。

插入的顺序执行需要很长时间&我需要优化插入所花费的时间。

一个可能的选择是使用线程使所有插入并行。据我所知,事务不会传播到多线程。

如何在事务边界内改进此操作所需的时间?

我认为你想做的事可能行不通。据我所知,数据库事务总是绑定到单个连接。而且JDBC连接API是阻塞的,即一次只能执行一条语句。因此,即使您跨多个线程共享Spring事务,您仍将执行SQL顺序。

因此,我看到以下选项可以组合使用:

  1. 调整您的数据库/SQL:批量插入,禁用约束,添加或删除索引等可能对执行时间产生影响。
  2. 删除事务约束。如果你可以把你的进程分解成多个进程,你就可以并行地运行它们,从而获得真正的性能。
  3. 调整/并行化Java应用程序中发生的部分,以便您可以在SQL语句运行时做其他事情。

要决定哪种方法最有希望,我们需要更多地了解您的实际情况。

最新更新