请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

链式事务的作用

对于db-db,db-jms的链式事务,相对于使用jta事务,其实好像没有解决问题呀,最后一步出错的话.

倒数第二步提交的事务无法回滚,那么它的意义何在呢?

正在回答

2回答

大漠风 2018-08-28 16:32:21

在使用同步方式进行分布式事务管理,具体比较复杂,不同的数据源使用的方式应该也不一样。

我们还是以db-db为例,大致说一下链式和同步的区别。

首先,在我们的课程里面,没有详细说明两个DB的情况下,使用事务同步的分布式事务管理的实现。实例中,演示了链式的实现,比较简单,将多个数据库的事务管理器加入一个chain即可。但是要使用同步方式,可以使用‘TransactionAwareDataSourceProxy’,第一个数据库使用JpaTransactionManager,使用spring事务管理,将第二个数据库的datasource用这个proxy封装,这样,这个数据源就能够就能够监听第一个Jpa的事务管理器管理的事务,跟着它一起提交、回滚。

除了用这种proxy,还可以使用spring的事务的事件机制,有一个EventListener,也可以实现。但是需要一些额外的配置。

其实,从某种角度来说,这样同步实现的事务管理,跟链式其实没有本质区别,都是依次提交。只是在链式里面,几个事务的提交、回滚是在一个方法里执行,便于维护事务。而同步是通过一些事件、监听器、或代理的方式进行同步事务调用。这样的话,在两个事务之间,势必会增加很多方法调用,这就增加了出错的概率。

还有一个就是,使用链式事务管理,它会在提交、回滚的时候返回一个状态,比如“STATE_MIXED”状态就是表示有部分事务已经提交,但是之后的事务已经回滚。在需要的时候,这也能用来判断是否出现了数据的不一致。

0 回复 有任何疑惑可以回复我~
大漠风 2018-08-27 21:05:12

jta是两阶段提交的强一致性事务管理。
链式事务其实跟spring事务同步实现的事务管理差不多,因为最后的事务提交失败的话,之前的事务不会回滚。但是链式事务从一个链里取出所有的事务管理器,依次开启事务,依次提交,而不是依赖事件或监听器,可以最大化的保证这些事务都提交成功。你可以看一下它的源代码,它在提交、回滚都做了一些额外的工作保证一致性。所以说它在保证事务一致性上,相对强一些。

0 回复 有任何疑惑可以回复我~
  • 提问者 木星鸽_手机 #1
    链式事务从一个链里取出所有的事务管理器,依次开启事务,依次提交,而不是依赖事件或监听器,可以最大化的保证这些事务都提交成功。
    -------------------------------------------------
    那么就是说不做链式事务的时候,出错的原因主要是什么呢?
    原来的事务执行的脆弱之处在哪
    回复 有任何疑惑可以回复我~ 2018-08-28 12:10:43
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信