我正在寻找一个事务框架的开发,它需要同时更新数据库表。
简单来说,单个事务应该在8个独立的表中同时更新,如果任何更新抛出错误,整个事务就会失败。
我有什么方法可以同时处理它,
即10个线程更新10个表,如果任何更新失败,则所有更新都应该回滚。
是否有任何框架可以让我处理这种情况。
如果使用JTA或Spring事务,它将由同一连接共享,并且无法实现并发更新的目的。
或者我可以使用基于自定义线程的解决方案编写任何方式。
答案 0 :(得分:0)
为什么使用JTA或Spring Transaction意味着您将使用相同的连接?如果您配置连接池并正确连接到它,您肯定会为您使用的每个线程获得不同的连接?
这对我来说似乎是一个异常配置的分布式事务,我第一次尝试使用Spring和/或Hibernate。我认为你只需要确保将交易视为分布式交易。
答案 1 :(得分:0)
该框架是JTA。
您的数据库是否可以为所有线程使用一个连接。可以找到详细信息here。因此,在一般情况下,您需要为每个线程建立连接。
如果使用XA数据源,则可以尝试在JTA事务的控制下运行并发线程。
这很复杂,并且准备线程需要时间,所以它可能只有用,如果更新需要很长时间,受影响的表是独立的,并且数据库服务器中有足够的CPU。 / p>
更新
关于交易传播,here你可以找到一些想法。
答案 2 :(得分:0)
您可以使用标准JDBC。 JDBC允许您在多个线程之间共享单个Connection。要使多个线程在一个事务中工作,您应该
如果使用Spring的SingleConnectionDataSource
,也可以使用Spring JDBC