一. 增加主从数据库配置
基于05章内容,我们在application.properties增加如下内容
1. 增加从数据库配置
spring.shardingsphere.datasource.s0.type = com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.s0.driver-class-name = com.mysql.jdbc.Driver
spring.shardingsphere.datasource.s0.url = jdbc:mysql://172.16.14.129:3306/user_db?useUnicode=true
spring.shardingsphere.datasource.s0.username = root
spring.shardingsphere.datasource.s0.password = Vv12345!
2. 定义主从库逻辑数据源 ds0 未自定义名称 可修改为其他名称
# 主库从库逻辑数据源定义 ds0为user_db
spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=m0
spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=s0
3. 由于我们配置了从库,那么t_user这个表也要对应从库中的表,所以我们注释掉原来的固定分配到m0,修改为ds0
# t_user分表策略,固定分配至m0的t_user真实表
#spring.shardingsphere.sharding.tables.t_user.actual-data-nodes = m$->{0}.t_user
spring.shardingsphere.sharding.tables.t_user.actual-data-nodes = ds0.t_user
二. 测试
在修改了配置后,我们尝试测试一下,配置了主从数据库,那么查询的时候,会不会只从从数据库进行查询
但是我在单测的时候一直报错,报错提示如下
搞得我一脸茫然,我以为是数据库密码不对,核实发现密码没问题
我以为是服务器的问题,我将从服务器的地址,换成主服务器,不配置从服务器进行测试,测试通过,那么说明也不是从服务器的问题,那到底是啥问题呢???仔细一看,原来少写一个地方,这里也要加上s0
接下来进行单测,我们看看结果,确实是从s0也就是从数据库进行了查询
插入测试,很显然都插入到了主数据,实现了我们预期的读写分离
那么我们再看下,从数据库有我们刚刚插入的数据吗
新插入的12,13,14在从库里面也出现了,说明数据同步没问题,此时注意,从库id为1的name我手动改成了姓名111,大家回看查询的单测,可以看到查询出来的也是111说明真的是从从库里面查询出来的,打消大家数据都一样怎么知道到底是不是真的从从数据库拿出来的疑虑