参考:https://www.51cto.com/article/747736.html
https://blog.csdn.net/qq_41581588/article/details/126966665
源码地址:git@gitee.com:jackXUYY/springboot-example.git
读写分离测试
我们启用后缀名为dev的配置文件,如下,数据库链接需要改成自己的地址
库表需要自己建,在resources/sql下
配置如下
# 读写分离配置,使用前先搭建mysql主从数据库,对应UserController
spring:
shardingsphere:
datasource:
# 配置真实数据源
names: master,slave1,slave2
# 配置第 1 个数据源,为了方便,我们搞3个库,但里面的表一样,当做主从配置
master:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/db_user
password: root
type: com.zaxxer.hikari.HikariDataSource
username: root
# 配置第 2 个数据源
slave1:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/db_user1
password: root
type: com.zaxxer.hikari.HikariDataSource
username: root
# 配置第 3 个数据源
slave2:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://127.0.0.1:3306/db_user2
password: root
type: com.zaxxer.hikari.HikariDataSource
username: root
mode:
# 内存模式 内存模式,初始化配置或执行SQL等操作均在当前进程生效
# Standalone 单机模式,可以将数据源和规则等元数据信息持久化,但是这些元数据不会在集群中同步
# Cluster 集群模式,提供了多个Apache ShardingSphere实例之间元数据共享以及分布式场景下的状态协调的能力,也提供水平扩展以及高可用的能力
# 可参考 https://blog.csdn.net/qq_41581588/article/details/126966665
type: Memory
# 打印sql
props:
sql-show: true
rules:
# 读写分离规则
readwrite-splitting:
# 数据源配置
data-sources:
# 这个名字随便起
myds:
# 读写分离类型,如: Static,Dynamic
type: Static
# 读数据源负载均衡算法名称
load-balancer-name: alg_random
props:
# 读数据源名称,多个从数据源用逗号分隔
read-data-source-names: slave1,slave2
# 写数据源名称
write-data-source-name: master
# 负载均衡配置
load-balancers:
# 定义负载均衡算法:随机,轮询,权重
alg_random:
type: RANDOM
alg_round:
type: ROUND_ROBIN
alg_weight:
props:
slave1: 1
slave2: 2
type: WEIGHT
启动服务,执行这两个接口看控制台打印结果
垂直分片 测试 (从不同的库中加载多张不同的表在一个项目中使用)
打开dev2的配置,执行OrderController里面的接口看控制台打印的效果
注意数据库链接改成自己的,库表需要先建好,
水平分表测试(将表拆成多个结构一样,每个表存一点数据)使用dev3的配置
建个t_order1的表,和t_order结构一样
水平分片:查询所有记录,
查询了两个数据源,每个数据源中使用UNION ALL连接两个表
* Actual SQL: server-order0 ::: SELECT id,order_no,user_id,amount FROM t_order0 UNION ALL SELECT id,order_no,user_id,amount FROM t_order1
* Actual SQL: server-order1 ::: SELECT id,order_no,user_id,amount FROM t_order0 UNION ALL SELECT id,order_no,user_id,amount FROM t_order1
关联表测试,使用dev4的配置
略
广播表测试 使用dev5的配置
略