Spring/SpringBoot系列之springboot+mysql+mybatis实现读写分离实战【二十六】

1. 前言

读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP。

然而,应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点,因为数据源配置都是写在配置中的,新增数据库意味着新加一个数据源,必然改配置,并重启应用。当然,好处就是相对简单。

Spring/SpringBoot系列之springboot+mysql+mybatis实现读写分离实战【二十六】

2. AbstractRoutingDataSource

基于特定的key,路由到特定的数据源。它内部维护了一组目标数据源,并且做了路由key与目标数据源之间的映射,提供基于key查找数据源的方法。
Spring/SpringBoot系列之springboot+mysql+mybatis实现读写分离实战【二十六】

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系列之主从复制配置【十二】