springboot多数据源连接数据库

方式一:不同的mapper对应不同的数据源

参考文章:springBoot + Hikari 配置多数据源连接数据库

快速配置多数据源(整合MyBatis)

方式二:动态切换数据源

spring boot使用AbstractRoutingDataSource实现动态数据源切换

继承AbstractRoutingDataSource再通过AOP实现动态数据源切换

AbstractRoutingDataSource 只支持单库事务,也就是说切换数据源要在开启事务之前执行。 spring DataSourceTransactionManager进行事务管理,开启事务,会将数据源缓存到DataSourceTransactionObject对象中进行后续的commit rollback等事务操作。

出现多数据源动态切换失败的原因是因为在事务开启后,数据源就不能再进行随意切换了,也就是说,一个事务对应一个数据源。

传统的Spring管理事务是放在Service业务层操作的,所以更换数据源的操作要放在这个操作之前进行。也就是切换数据源操作放在Controller层,可是这样操作会造成Controller层代码混乱的结果。

故而想到的解决方案是将事务管理在数据持久 (Dao层) 开启,切换数据源的操作放在业务层进行操作,就可在事务开启之前顺利进行数据源切换,不会再出现切换失败了

你可能感兴趣的:(java,spring,java,spring,boot)