具有事务支持的多个表的Java并发更新

时间:2013-06-03 11:29:07

标签: java multithreading concurrency transactions jta

我正在寻找一个事务框架的开发,它需要同时更新数据库表。

简单来说,单个事务应该在8个独立的表中同时更新,如果任何更新抛出错误,整个事务就会失败。

我有什么方法可以同时处理它,

即10个线程更新10个表,如果任何更新失败,则所有更新都应该回滚。

是否有任何框架可以让我处理这种情况。

如果使用JTA或Spring事务,它将由同一连接共享,并且无法实现并发更新的目的。

或者我可以使用基于自定义线程的解决方案编写任何方式。

3 个答案:

答案 0 :(得分:0)

为什么使用JTA或Spring Transaction意味着您将使用相同的连接?如果您配置连接池并正确连接到它,您肯定会为您使用的每个线程获得不同的连接?

这对我来说似乎是一个异常配置的分布式事务,我第一次尝试使用Spring和/或Hibernate。我认为你只需要确保将交易视为分布式交易。

答案 1 :(得分:0)

该框架是JTA。

您的数据库是否可以为所有线程使用一个连接。可以找到详细信息here。因此,在一般情况下,您需要为每个线程建立连接。

如果使用XA数据源,则可以尝试在JTA事务的控制下运行并发线程。

这很复杂,并且准备线程需要时间,所以它可能只有用,如果更新需要很长时间,受影响的表是独立的,并且数据库服务器中有足够的CPU。 / p>

更新

关于交易传播,here你可以找到一些想法。

答案 2 :(得分:0)

您可以使用标准JDBC。 JDBC允许您在多个线程之间共享单个Connection。要使多个线程在一个事务中工作,您应该

  • 创建java.sql.Connection /或从池中获取
  • 关闭自动提交
  • 使用相同的连接运行并发任务
  • 等待任务完成
  • 如果所有任务都成功完成,则提交;否则回滚
  • 关闭连接

如果使用Spring的SingleConnectionDataSource

,也可以使用Spring JDBC