关于spring boot mybatis 多数据源的多种方法原理概述

本文概述了在微服务背景下,针对Mybatis实现多数据源、读写分离的需求,提供了四种不同的解决方案。包括利用MySQL的replicationDriver、自定义数据源配置、AbstractRoutingDataSource以及在Service层控制数据源等。每种方案都有其优缺点,作者建议在大多数情况下,控制数据源在Service层即可,以保持代码结构清晰。对于复杂的多数据源事务,可以通过更高层的服务封装和额外策略来处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初衷:微服务的盛行及对于mybatis的习惯。对于现有的数据+应用的架构希望寻找及总结一种灵活、扩展性好、方便的方案作为以后长期使用。

目标是可以支持多数据源、读写分离、原理配置简单。


方案1:

原理:使用mysql自带的replicationDriver来实现。replicationDriver简单来说就是存在2个connection:masterConnection和slaveConnection。当setReadonly(true)时就会把currentConnection=slaveConnection.。

配置:

jdbc.driverClassName = com.mysql.jdbc.ReplicationDriver

jdbc.url = jdbc:mysql:replication:master:3306,slave1:6603,slave2:3306(在这里可以配置多个salve,估计在自动选择slaveConnection的时候会在多个数据源间自动路由)


方案2:

原理:自己实现配置,主要做法是先配置多个dataSource,然后再DAO层中设置多个sqlsession。一个读、一个写(或者其他更多)。这样在DAO层的方法中,选择自己适合的sqlsession来操作数据库即可。这样做很灵活,数据源的选择在DAO层的方法级,灵活性很大。但如果与mybatis结合的话就显得复杂和混乱了。因为mybatis有自己的mapper,一般做法是DAO层调用mapper,如果这样还得考录如何将相应DAO方法中的sqlsession注入到mapper中使用,又或者抛弃了mapper直接使用DAO。(有人会说直接使用mapper作为DAO,这也是日常项目中的一种做法,但对于复杂的SQL构建,对于用mapper+xml的方式来做还是很复杂和浪费时间并且有一定限制的。所以才会再加一个所谓的DAO层来进行封装。这里其实就是萝卜白菜各有所爱,不深入)

这个是就实现mapper粒度的不同数据源,并且是通过原生配置不需过多自我实现:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值