在seata分布式事务,A分支事务已执行完成,同时记录了undo-log;B分支事务正在执行...在B分支事务执行期间,存在一个非Seata的独立事务X,事务X读取了A分支已提交的数据(脏数据),并使用脏数据执行了相应操作后;B分支事务执行失败,主事务驱动A分支事务回滚,A分支事务根据undo-log执行回滚后。即会丢失独立事务X提交的数据。
这里有两个方法各自一条线程,三个业务线 两个业务分别是: 1.下单业务(扣减库存->tx1,生成订单->tx2) 2.采购业务(采购了商品补仓->tx3)
@GlobalTransactional //seata的分布式事务 public void doOrder(){ 1)扣减库存 2)生成订单 }
@GlobalLock public void doAdditional(){ 3)增加库存 }
@GlobalTransactional public void doStatus(){ 4)修改用户状态 5)修改余额状体 }
@GlobalLock应该是抢全局锁的吧.@GlobalLock它怎么知道要去竞争的是doOrder()方法中的全局锁?而不是doStatus()方法中的全局锁呢?如果我理解的有误,能给出解释吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。