springboot 整合mybatis plus,使用druid 切换多数据源实现单数据库事务,附赠项目源码地址

项目源码地址

GitHub - liyanlei58/ssm: springboot druid mybatis plus 事务

最近想搭一套spring cloud开发环境,各种不顺利吧,先是spring cloud的组件某些功能不好用,是版本自身的bug。后来又碰到了事务无法回滚这个搞了好几个周,我差点想要放弃,不得不说我有时候确实很执着,今天总算弄清楚了。一开始不知道是哪里错,后来网上找了一个好用的事务程序,但是切到我的项目上还是不好用,之后怀疑是springboot版本问题,怀疑都仅仅是怀疑。

因为mysql jar包,5.XXX的版本与8.XXX的版本的驱动不是一样的,所以把问题锁定到mysql驱动上了,这个是正解吧。网上找到了下面这篇文章,如文章所言我恰巧用的mysql-connector-java:8.0.28版本的jar包,但是按照他的操作我的问题并没有解决。建议自查!MySQL驱动Bug引发的事务不回滚问题,也许你正面临该风险! - 知乎

 后来又找到了事务中动态切换数据源的问题 - 简书 文章,进一步了解数据源是怎么切换的,执行数据库操作的时候(增、删、改、查数据库表或者@Transactional注解开启事务的时候),mybatis会去创建链接,创建链接会选择数据源,在这个时候进行的数据源切换。

于是把这两个注解放到一起

切换数据源是AOP实现的,@Transactional注解也是AOP实现的,又出现一个切换执行顺序的问题,spring切面执行顺序-事务切面注意点 - 简书 看了这篇文章,在自定义注解的AOP切面上加上@Order(-1),问题终于算是解决了。事务可以正常,数据源也可以正常切换了。

附@Primary注解说明  

其作用与功能,当有多个相同类型的bean时,使用@Primary来赋予bean更高的优先级。

Spring中@Primary注解_盲目的拾荒者的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值