Shardingsphere简单使用例子

  之前在运满满用的是美团的zebra,zebra其实一款过于小众的分库分表工具。刚好看到微信上的一篇文章讲shardingsphere的,正好练练手。整个过程花了一个上午,主要是有两个坑。

一 环境准备

       <dependency>
                <groupId>org.apache.shardingsphere</groupId>
                <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
                <version>4.0.1</version>
            </dependency>

二 配置文件

  配置文件可以说是shardingshpere的核心,他不同于zebra需要和自家的lion配合(lion并没有开源)。而是在springboot的yaml配置文件中完成了分库分表的逻辑。

spring:

  redis:
    mode: cluster
    password: Kn0Wl3dge#BasE
    cluster:
      nodes: 172.24.128.52:32556,172.24.128.77:32523,172.24.128.133:32546,172.24.128.136:32546,172.24.128.134:32545,172.24.128.135:32519

  data:
    mongodb:
      uri: mongodb://baseUser:123456@172.24.128.186:32068,172.24.128.187:32593,172.24.128.185:30351/base?replicaSet=rs1&readPreference=secondaryPreferred&connectTimeoutMS=300000

  shardingsphere:
    datasource:
      # 数据源,这里配置两个,分别是ds1,ds2
      names: ds1
      # ds1的配置信息,product_db1
      ds1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/knowledge?serverTimezone=GMT%2B8&characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&rewriteBatchedStatements=true
        username: root
        password: mxzxyz
    # 分片的配置
    sharding:
      # 表的分片策略
      tables:
        ## team_shard是逻辑表的名称
        team_shard:
          # 数据节点配置,采用Groovy表达式,切分之后的真实表所在的节点
          actual-data-nodes: ds$->{1}.team_shard_$->{0..3}
          table‐strategy:
            inline:
              # 分片键为店铺ID
              sharding‐column: team_id
              # 分片策略取模
              algorithm‐expression: team_shard_$->{team_id%4}

    props:
      sql:
        # 日志显示具体的SQL
        show: true

 

三 代码部分

  根据配置文件中的 

tables:
        ## team_shard是逻辑表的名称
        team_shard:

  我们在写mapper.xml的时候,只需要写team_shard作为表名,其他的跟单表真的没有区别

   同时注意分片字段要通过手动设置,比如雪花算法

  

TeamShardEntity teamShardEntity = TeamShardEntity.builder().teamName(req.getTeamName())
                            .teamAvatar(req.getTeamAvatarUrl())
                            .description(req.getTeamDesc()).build();
            teamShardEntity.setTeamId(System.currentTimeMillis());
            teamService.addTeamShard(teamShardEntity);

 

四 踩坑

  1 druid数据源

  如果使用了shardingsphere,就不能使用 

        <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>

  而是需要直接引用druid,原因还不清楚

     <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.22</version>
        </dependency>

  2 原配置文件中有mongo的配置文件

  配在了shardingsphere的下面,结果启动就是报错,然后我把这部分放在了shardingsphere前,就好了真是神奇

spring:

  redis:
    mode: cluster
    password: Kn0Wl3dge#BasE
    cluster:
      nodes: 172.24.128.52:32556,172.24.128.77:32523,172.24.128.133:32546,172.24.128.136:32546,172.24.128.134:32545,172.24.128.135:32519

  data:
    mongodb:
      uri: mongodb://baseUser:123456@172.24.128.186:32068,172.24.128.187:32593,172.24.128.185:30351/base?replicaSet=rs1&readPreference=secondaryPreferred&connectTimeoutMS=300000

  shardingsphere:
    datasource:
      # 数据源,这里配置两个,分别是ds1,ds2
      names: ds1
      # ds1的配置信息,product_db1
      ds1:

 

posted on 2022-05-12 15:16  MaXianZhe  阅读(775)  评论(0编辑  收藏  举报

导航