记一次springboot项目中多数据源使用以及因事务导致的异常问题处理

场景描述:任务调度操作中,经常会有切换数据源进行查询、插入本地库和中间库等操作,携带事务后,可能会导致数据源切换失败,如a方法上有个事务,b方法有个事务,a调用b,此时的b方法只能执行默认a方法使用的数据源

 第一种方式:方法上使用mybatisplus的事务控制@DSTransactional,在业务中动态切换数据源

    @Override
    @DSTransactional
    public boolean add(XX xx) {
        // 默认库业务正常方法调用
        
        // 动态切换数据源
        DynamicDataSourceContextHolder.push("oracle_exchange");
        // 执行交换库业务
        xxxmapper.add();
        // 使用后清理,继续使用默认数据源
        DynamicDataSourceContextHolder.clear();
    }

第二种方式:在调用的方法上修改事务的传播方式,使用@Transactional(propagation = Propagation.REQUIRES_NEW)

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public boolean add(){
        //业务处理  
    }

第三种方式:主方法上不加事务,只在具体的方法上或者固定的中间库mapper上使用@DS("数据源")

方法上加

    @Override
    @DS("oracle_exchange")
    public Do findxxx(String id) {
        xxx
    }

mapper接口上加,整个接口生效

    @Mapper
    @DS("hive")
    public interface XxxMapper {
        
    }

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再小的帆也能远航!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值