0

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

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

有什么办法可以同时处理,

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

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

如果您使用 JTA 或 Spring 事务将由同一连接共享并破坏并发更新的目的。

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

4

3 回答 3

0

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

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

如果使用 Spring 的 SingleConnectionDataSource,也可以使用 Spring JDBC

于 2013-06-03T12:20:40.587 回答
0

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

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

于 2013-06-03T12:05:48.300 回答
0

框架是JTA。

这取决于您的数据库是否可以为所有线程使用一个连接。详细信息可以在这里找到。所以在一般情况下,每个线程都需要一个连接。

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

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

更新

关于事务传播,在这里您可以找到一些想法。

于 2013-06-03T12:06:40.710 回答