Spring/SpringBoot系列之springboot+mysql+mybatis实现读写分离实战【二十六】
1. 前言
读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP。
然而,应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点,因为数据源配置都是写在配置中的,新增数据库意味着新加一个数据源,必然改配置,并重启应用。当然,好处就是相对简单。
2. AbstractRoutingDataSource
基于特定的key,路由到特定的数据源。它内部维护了一组目标数据源,并且做了路由key与目标数据源之间的映射,提供基于key查找数据源的方法。
3. 实战
3.1 MySQL主从复制配置
环境
- 操作系统 — CentOS 7
- 数据库版本 — MySQL 5.7
把一台虚拟机克隆成两份,ip分别配置为:
- 192.168.67.1 — master
- 192.168.67.11 — slave1
- 192.168.67.21 — slave2
克隆步骤参考:CentOS7虚拟机克隆
主从复制配置参考:MySQL系列之主从复制配置【十二】