zoukankan      html  css  js  c++  java
  • SpringCloud下结合shardingSphere进行分库分表(inline表达式简单实现)

    本例主要参看官方的配置进行作业,实现简单的mod算法分库分表,对于分库分表的理解比较合适。

    生产环境上建议自定义分库分表用算法(下一篇随笔介绍)。

    1)关键部分的pom依赖:

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
            <dependency>
                <groupId>io.shardingsphere</groupId>
                <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>

    2)关键yml配置:

          2.1)数据源:6个数据源,两个集群,分别为1主2从;

                    主1:master0;从1:master0salve0;从2:master0slave1

                    主2:master1;从1:master1slave0;从2:master1slave1

         2.2)作为demo演示,会员表进行分库和分表;每个库里有两张表:mc_member0和mc_member1;

         2.3)分库规则:gender=1(男)时   gender%2 -> master1库; gender=2(女)时   gender%2 -> master0库;

         2.4)分表规则:id偶数时,id%2->mc_member0表;id为奇数时,id%2->mc_member1表;

         2.5)注意事项1:对逻辑表配置分片策略时,数据库分片策略设置逻辑数据源,不使用物理库名;表分片策略内,使用物理表名;

         2.6)配置读写分离:master-slave-rules下的rule逻辑名可以自定义如 ms1和ds1等。     

    sharding:
      jdbc:
        datasource:
          names: master0,master0salve0,master0slave1,master1,master1slave0,master1slave1
          master0:
            type: com.alibaba.druid.pool.DruidDataSource
            url: jdbc:mysql://localhost:3306/mcspcsharding0?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
            username: root
            password: root
          master0salve0:
            type: com.alibaba.druid.pool.DruidDataSource
            url: jdbc:mysql://localhost:3306/mcspcsharding0s0?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
            username: root
            password: root
          master0slave1:
            type: com.alibaba.druid.pool.DruidDataSource
            url: jdbc:mysql://localhost:3306/mcspcsharding0s1?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
            username: root
            password: root
          master1:
            type: com.alibaba.druid.pool.DruidDataSource
            url: jdbc:mysql://localhost:3306/mcspcsharding1?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
            username: root
            password: root
          master1slave0:
            type: com.alibaba.druid.pool.DruidDataSource
            url: jdbc:mysql://localhost:3306/mcspcsharding1s0?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
            username: root
            password: root
          master1slave1:
            type: com.alibaba.druid.pool.DruidDataSource
            url: jdbc:mysql://localhost:3306/mcspcsharding1s1?useUnicode=true&character_set_server=utf8mb4&useSSL=false&serverTimezone=GMT%2B8
            username: root
            password: root
        config:
          sharding:
            tables:
              mc_member:
                actual-nodes: mcspcsharding$->{0..1}.mc_member$->{0..1}
                database-strategy:
                  inline:
                    sharding-column: gender
                    algorithm-expression: master$->{gender % 2}
                table-strategy:
                  inline:
                    sharding-column: id
                    algorithm-expression: mc_member$->{id % 2}
            binding-tables: mc_member  # 多个时逗号隔开
            broadcast-tables: mc_master
            master-slave-rules:
              ms0:
                master-data-source-name: master0
                slave-data-source-names: master0salve0,master0slave1
              ms1:
                master-data-source-name: master1
                slave-data-source-names: master1slave0,master1slave1
          props:
            sql:
              show: true

    3)启动类。因为数据源的重复注入问题,需要进行如下配置:

    @SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
    package com.chong.mcspcshardingdbtable;
    
    import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    @SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})
    @EnableDiscoveryClient
    @EnableTransactionManagement
    @ComponentScan(basePackages = {"com.chong.common","com.chong.mcspcshardingdbtable"})
    public class McSpcShardingDbTableApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(McSpcShardingDbTableApplication.class, args);
        }
    }

    其他的sever和repository等不在贴码,自己试验下应该很容易实现。

  • 相关阅读:
    部署至Oracle数据库的注意事项
    当在centos上面部署项目时,mysql的一些驱动安装不上,
    drf利用redis做缓存是发生一点错误提示
    python字符串前面加个u代表什么
    在学习数据分析时,安装anaconda时遇到一点问题
    在使用scrapy框架爬取sina时,常见保存
    在linux上scrapyd部署scrapy项目时出现service_identity,并且不能识别其中的一个opentype模块
    如何在mysql增加一个和root权限一样的用户,安排
    mysq的root密码忘记,原来还有更优雅的解法
    mysql远程连接阿里云的Ubuntu服务器
  • 原文地址:https://www.cnblogs.com/chongpf/p/12379948.html
Copyright © 2011-2022 走看看