@Transactional注解结合mogoDB4.0引发的业务问题(WriteConflict写冲突)

最近在做一个saas项目,该项目用的是springboot+springdata,持久数据层用的是mogoDB。

因为mogoDB4.0新增了多文档事务支持,再加上项目的业务需求,用mogoDB确实是个不错的选择,但是因为mogoDB的事务功能还不够成熟,采用的是全局一致性事务控制,也就是因为这个全局事务控制的特性,在这个项目上引发了非常严重的问题。

我先解释下什么是全局一致性把。

在mogoDB进入了一个事务中的时候,mogoDB会把事务中的数据操作(sql操作)涉及到的数据库(你没有听错,就是整个库)形成一个快照(就是记录这个事务开始时整个库的数据),所以其他事务在这个库中增删改的数据这个事务无法读到

这会引发什么问题?

当我在含有@Transactional注解的业务方法serviceA()去调用另一个业务类中(注意是另一个类,因为@Tanscational注解的特性,不同类处在不同的事务中)含有@Transactional的业务方法serviceB(),而两个serviceA()和serviceB()都修改了同一条数据C(方法A的修改在方法B之前),那么此时mogoDB会报WriteConflict 写冲突的异常。因为serviceB()的事务读取不到serviceA()事务中修改的数据。就算把serviceA()中修改C的操作放在执行serviceB()后面,等serviceB()的事务提交了再在serviceA()里修改C,还是会报Wri

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值