SpringBoot+MyBatis+MySQL读写分离实现
作者 |废物大师兄
来源 | urlify.cn/f6F7je
1. 引言
读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行 , 至于谁来做选择数据库这件事儿 , 无非两个 , 要么中间件帮我们做 , 要么程序自己做 。 因此 , 一般来讲 , 读写分离有两种实现方式 。 第一种是依靠中间件(比如:MyCat) , 也就是说应用程序连接到中间件 , 中间件帮我们做SQL分离;第二种是应用程序自己去做分离 。 这里我们选择程序自己来做 , 主要是利用Spring提供的路由数据源 , 以及AOP
然而 , 应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点 , 因为数据源配置都是写在配置中的 , 新增数据库意味着新加一个数据源 , 必然改配置 , 并重启应用 。 当然 , 好处就是相对简单 。
文章插图
2. AbstractRoutingDataSource
基于特定的查找key路由到特定的数据源 。 它内部维护了一组目标数据源 , 并且做了路由key与目标数据源之间的映射 , 提供基于key查找数据源的方法 。
文章插图
3. 实践
关于配置请参考《MySQL主从复制配置》
3.1. maven依赖
3.2. 数据源配置
application.yml
spring:datasource:master:jdbc-url: jdbc:mysql://192.168.102.31:3306/testusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverslave1:jdbc-url: jdbc:mysql://192.168.102.56:3306/testusername: pig# 只读账户password: 123456driver-class-name: com.mysql.jdbc.Driverslave2:jdbc-url: jdbc:mysql://192.168.102.36:3306/testusername: pig# 只读账户password: 123456driver-class-name: com.mysql.jdbc.Driver
- MagSafe皮革钱包上手:能塞3张卡片 放入口袋时会分离
- 水药分离设计+独立内胆,左点小仙智能足蒸器Z8表现无可挑剔
- 超高效 Vue 前后端分离cms管理系统LinCMS-Vue
- python文件读写模式,覆盖写和清空写你清楚了吗
- 群联第二代PCIe 4.0 SSD主控E18性能曝光:读写均超7GB/s
- 分离摇杆+16000DPI,旗舰电竞鼠标ROG魔刃标准版体验
- 国产良心SSD读写不虚标,379元入手512G,8秒开机
- vivo又开始秀了!这手机摄像头能分离