sharding-jdbc读写分离

  • 在上一篇文章实现mysql主从复制之后,基于sharding-jdbc实现读写分离。上文地址Mysql主从复制

  • 搭建Springboot基本结构,和mysql主从复制,master用于写,slave1,slave2用于读,从库之间采用负载均衡轮询方式,使用sharding-jdbc做好配置即可实现。

  • 引入sharding-jdbc依赖

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.0.0-RC1</version>
        </dependency>
  • application.yml配置数据源读写分离
spring:
  shardingsphere:
    datasource:
      names:
        master,slave1,slave2  #这里的master,slave可以改变,和下面的对应即可
      #主数据源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.1.100:3306/read_writer_split?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
        username: root
        password: 1004
      # 从数据源slave1
      slave1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.1.101:3306/read_writer_split?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
        username: root
        password: 1004
      # 从数据源slave2
      slave2:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.1.102:3306/read_writer_split?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
        username: root
        password: 1004
    sharding:
      default-data-source-name: master              # 默认数据源,主要用于写
    masterslave:                                    # 读写分离配置
      name: dataSource                              # 最终的数据源名称
      master-data-source-name: master               # 主库数据源名称
      slave-data-source-names: slave1,slave2        # 从库数据源名称列表,多个逗号分隔
      load-balance-algorithm-type: round_robin      #轮询
    props:
      sql:
        show: true                                  #开启SQL显示,默认false
  main:
    allow-bean-definition-overriding: true          #允许数据源bean覆盖
  • UserController写两个接口用于测试读写分离
    @GetMapping(value = "/list")
    public List list(){
        return userService.list();
    }


    @PostMapping(value = "/save")
    public String save(@RequestBody User user) {
        userService.save(user);
        return "ok";
    }
  • 测试查询
    image
    image

  • 测试添加
    image

image

posted @ 2022-09-25 17:26  加瓦同学  阅读(110)  评论(0编辑  收藏  举报