springboot多数据源---2事务

本文探讨了在Spring框架中处理多数据源事务控制的问题。由于Spring的声明式事务无法直接应用于多源场景,提出了两种可能的解决方案:1) 使用主库事务管理器,但面临从库异常无法回滚的风险;2) 通过编程式事务在一个方法内开启两个事务,但这同样存在数据一致性问题。这两种方法都有其局限性,无法完全解决分布式事务的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、多数据源事务控制
在多数据源下,由于涉及到数据库的多个读写。一旦发生异常就可能会导致数据不一致的情况, 在这种情况希望使用事务
进行回退。
但是Spring的声明式事务在一次请求线程中只能使用一个数据源进行控制
但是对于多源数据库:
1.单一事务管理器(TransactionManager)无法切换数据源,需要配置多个TransactionManager。
2.@Transactionnal是无法管理多个数据源的。 如果想真正实现多源数据库事务控制,肯定是需要分布式事务。 这里指的是多源数据库事务控制的一种变通方式。
在这里插入图片描述
1. 只使用主库TransactionManger
使用主库事务管理器,也就是说事务中产生异常时,只能回滚主库数据。但是因为数据操作顺序是先主后从,所以分一下三种情况:

  1. 主库插入时异常,主库未插成功,这时候从库还没来及插入,主从数据是还是一致的
  2. 主库插入成功,从库插入时异常,这时候在主库事务管理器监测到事务中存在异常,将之前插入的主库数据插入,主从数据还是
    一致的
  3. 主库插入成功,从库插入成功,事务结束,主从数据一致。
    在这里插入图片描述
    在这里插入图片描述
    当然这只是理想情况,例外情况:
    4.从库插入之后出现异常, 只能回滚主库数据 ,从库数据是无法回滚的 , 数据将不一致。
    5.从库数据插入成功后,主库提交,这时候主库崩溃了,导致数据没插入,这时候从库数据也是无法回滚的。这种方式可以简单实现多源数
    据库的事务管理,但是无法处理上述情况。

2. 一个方法开启2个事务
spring编程式事务 :
在这里插入图片描述
spring声明式事务:
@Transactional

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值