SpringBoot多数据源事务解决方案
https://blog.csdn.net/u013407099/article/details/124526396
多数据源切换下保证事务解决方案
https://blog.csdn.net/reee112/article/details/90442542
概述
前情提要
多数据源切换流程结构图如下所示,包含几个组成元素:
自定义的数据源配置处理,通过DataSource对象动态注册到系统中
自定义数据源标识注解与切面
数据源切换时的上下文线程变量持有者
自定义AbstractRoutingDataSource,实现数据源路由切换
事务
如果只是重写了AbstractRoutingDataSource方法,那么在事务下数据源是切换不了的,还需要重写事务方法。
Spring使用事务的方式有两种,一种是声明式事务,一种是编程式事务,我们讨论的都是关于声明式事务,这种方式很方便,也是大家常用的,这里为什么讨论这个问题,当我们想将不同库的表放在同一个事务使用的时候会报错。
我们要做就是动态的根据DataSourceType获取不同的Connection,不从缓存中获取Connection。
在Spring事务管理中有一个核心类DataSourceTransactionManager,该类是Spring事务核心的默认实现,AbstractPlatformTransactionManager是整体的Spring事务实现模板类,整体的继承结构如下图。