记录一下 SpringBoot 中遇到的事务失效问题

2024-12-03 更新,在公众号上刷到了鱼皮转发的文章,这一篇更全面,绝对的宝藏文章

------------------------------------------

坏了,Spring事务怎么失效了?

当时自己总结的这几个 CASE 在大佬的文章里也有提到,如果认真看完了上面这篇文章那就不用看我写的啦

------------------------------------------

假设在某个方法中,需要同时对 A、B 库进行相关的增删改查操作

1、当其中的库 A 仅做查询操作时,可以在事务开启前先将库 A 的数据查出后作为参数,下一步再调用开启事务的方法(注意两个方法不能在同一个 service,否则事务会失效,PS:只有当事务方法被当前类以外的代码调用时,才会由 Spring 生成的代理对象来管理。 )

2、如果库 A 为主要事务的数据源,而库 B 仅仅在库 A 处理完数据后做切库插入的操作,那么可以通过开启新事务的方式来解决(最好插入是放在最后,后续会说明)。

2.1 当库 B 是在最后操作的,那么库 B 操作报错后库 A 也能回滚,这是最理想的状况。

2.2 如果库 B 是在中间操作的,那么就会产生 A 报错后 B 无法回滚的尴尬情况。

3、通过事务挂起,也可以达到切换数据源的目的,但是该方法要慎重使用,除非你的操作仅仅只是做查询。可以看作是对方法 1 的一种补充,当库 A 需要 库 B 经过一系列数据处理后才能做查询时,就可以使用该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值