SharDingJDBC-5.1.0按月水平分表+读写分离,自动创表、自动刷新节点表

4升到5过后还是解决了许多问题,4版本的跨库和子查询问题都可以了,性能也提高了
实现自动创建表,动态获取节点表,配置如下

建表语句可以使用下面这句,解决很多麻烦问题
CREATE TABLE newName LIKE oldName

        <!-- ShardingSphere -->
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>5.1.0</version>
        </dependency>
         <!-- 使用druid连接池需要加dbcp依赖 -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-dbcp</artifactId>
            <version>10.0.16</version>
        </dependency>
        <!-- 使用druid需要注意artifactId, -->
      <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.13</version>
        </dependency>
          <!-- 使用druid就不导这个依赖了,都是连接池 -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </dependency>

读写分离需要配置数据库有主从同步

spring:
  #shardingjdbc主要配置
  shardingsphere:
    # 是否启用sharding
    enabled: true
    props:
      # 是否显示sql
      sql-show: true
    datasource:
      names: master,slave #数据源名称,多个以逗号隔开
      master:
        type: ${spring.datasource.type}
        driver-class-name: ${spring.datasource.hikari.driver-class-name}
        url: ${spring.datasource.hikari.jdbc-url}
        username: ${spring.datasource.hikari.username}
        password: ${spring.datasource.hikari.password}
      slave:
        type: ${spring.datasource.type}
        driver-class-name: ${spring.datasource.hikari.driver-class-name}
        jdbc-url: jdbc:mysql://127.0.0.1:3308/tecloman_dev?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
        username: ${spring.datasource.hikari.username}
        password: 123456
    rules:
      sharding:
        tables:
          hss_history: # 分表,逻辑表名 数据库未分表的表名
            # 节点数据
            actual-data-nodes: master.hss_history,master.hss_history_202$->{201..212} #数据节点,均匀分布
            table-strategy: # 配置分表策略
              standard: # 用于单分片键的标准分片场景
                sharding-column: create_time # 分片列名称
                sharding-algorithm-name: hss-history-inline # 分片算法名称 不能使用下划线
        # 分片算法配置
        sharding-algorithms:
          hss-history-inline: # 分片算法名称 不能使用下划线
            type: CLASS_BASED #自定义策略
            props:
              strategy: standard
              algorithmClassName: mqtt.server.sharding.DateShardingAlgorithm
              #type: INTERVAL  # 分片算法类型 时间范围分片算法
              #props:
              #datetime-pattern: yyyy-MM-dd HH:mm:ss  #分片键的时间戳格式
              #datetime-lower: 2022-01-01 00:00:00 #时间分片下界值,
              #datetime-upper: 2024-01-01 00:00:00 #时间分片上界值
              #sharding-suffix-pattern: yyyyMM #分片数据源或真实表的后缀格式
              #datetime-interval-amount: 1 #分片键时间间隔,超过该时间间隔将进入下一分片
              #datetime-interval-unit: MONTHS #分片键时间间隔单位
        binding-tables: hss_history
        # 主键生成策略 也可以使用MP的主键生成
        default-key-generate-strategy:
          column: id # 自增列名称
          key-generator-name: id-key  # 分布式序列算法名称
        key-generators:
          id-key:
            type: SNOWFLAKE # 分布式序列算法类型
      #读写分离配置
      readwrite-splitting:
        data-sources:
          master: # 逻辑数据源名字 不要乱写名字,否则读写分离不生效
            type: STATIC #静态类型,(动态Dynamic)
            props:
              # 主库
              write-data-source-name: master
              # 从库
              read-data-source-names: slave
              # 负载均衡算法名称
              load-balancer-name: round
            # 负载均衡算法
        load-balancers:
          round: # 负载均衡算法名称
            type: ROUND_ROBIN  #负载均衡算法类型轮询算法
  jackson:
    #time-zone: UTC
    # UTC会晚8小时 所以要改GMT+8
    time-zone: UTC
    #date-format: yyyy-MM-dd HH:mm:ss
    #default-property-inclusion: non_null
  datasource:
    type: com.zaxxer
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值