SpringBoot+ShardingSphereJDBC实战(读写分离,分库分表,垂直拆分、水平拆分)附源码

参考:https://www.51cto.com/article/747736.html
https://blog.csdn.net/qq_41581588/article/details/126966665

源码地址:[email protected]:jackXUYY/springboot-example.git

读写分离测试

我们启用后缀名为dev的配置文件,如下,数据库链接需要改成自己的地址
库表需要自己建,在resources/sql下

SpringBoot+ShardingSphereJDBC实战(读写分离,分库分表,垂直拆分、水平拆分)附源码_第1张图片

配置如下

# 读写分离配置,使用前先搭建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

启动服务,执行这两个接口看控制台打印结果

SpringBoot+ShardingSphereJDBC实战(读写分离,分库分表,垂直拆分、水平拆分)附源码_第2张图片

垂直分片 测试 (从不同的库中加载多张不同的表在一个项目中使用)

打开dev2的配置,执行OrderController里面的接口看控制台打印的效果

注意数据库链接改成自己的,库表需要先建好,

SpringBoot+ShardingSphereJDBC实战(读写分离,分库分表,垂直拆分、水平拆分)附源码_第3张图片
水平分表测试(将表拆成多个结构一样,每个表存一点数据)使用dev3的配置
建个t_order1的表,和t_order结构一样

SpringBoot+ShardingSphereJDBC实战(读写分离,分库分表,垂直拆分、水平拆分)附源码_第4张图片
SpringBoot+ShardingSphereJDBC实战(读写分离,分库分表,垂直拆分、水平拆分)附源码_第5张图片

水平分片:查询所有记录,

查询了两个数据源,每个数据源中使用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的配置

你可能感兴趣的:(spring,boot,后端,java)