解析配置文件自动装配 DataSource + AbstractRoutingDataSource + AOP 实现动态数据源 - 补充:兼顾事务回滚以及分布式事务的情况

该博客补充了动态数据源实现中遇到的两个问题。一是事务执行失败未切回默认数据源,通过在finally块中恢复解决了此问题。二是注解方法涉及多个数据源时,事务处理受限,触及分布式事务话题,推荐阅读JTA和分布式事务解决方案的相关文章。
摘要由CSDN通过智能技术生成

前两篇文章已经介绍了动态数据源的具体实现过程,在经过一段时间的使用后,发现了两个比较严重的问题,在这里进行补充说明。

事务执行失败时没有切回默认数据源

@Transactional 注解的方法意味着使用数据库事务执行方法中的 sql 操作,默认情况下当方法抛出不受检查异常时,事务会进行回滚,我所实现的动态数据源方案通过 AOP 和注解的方式切换数据源, @Transactional 方法执行前切换目标数据源,执行完成后切换回默认数据源。

但当方法抛出不受检查异常时,AOP 方法无法执行到切回默认数据源的语句,因此在下次使用数据源时就会出错,期望使用的是默认数据源,然而并不是。

解决方法是把切回默认数据源的语句放在 finally(try {} funally {}) 块中执行。

    @Around(value = "@annotation(dataSource)")
    public Object changeDataSource(Proce
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值