ShardingSphere-JDBC水平分库分表

ShardingSphere-JDBC水平分库分表

ShardingSphere-JDBC水平分库分表非常简单,只需要添加ShardingSphere-JDBC依赖并进行配置即可

<!-- sharding-jdbc 分库分表 -->
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.1.0</version>
</dependency>

水平分库配置

spring:
  application:
    name: sharding-jdbc-test
  shardingsphere:
    datasource:
      names: ds0,ds1  # 配置数据源,给数据源起名
      ds0:  # 配置数据源具体内容,连接池、驱动、地址、用户名、密码
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mybatis?useSSL=false
        username: root
        password: 123456
      ds1:  # 配置数据源具体内容,连接池、驱动、地址、用户名、密码
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mybatis1?useSSL=false
        username: root
        password: 123456
    sharding:
      tables:
        classes:  # 这个classes是表名
          database-strategy:  #数据库策略
            inline:
              sahrding-column: db  # 分库的列名
              algorithm-expression: ds$->{id % 2}  #分库的策略
          actual-data-nodes: ds$->{0..1}.classes_$->{0..1} #设置classes表的分布,表在哪个数据库中  ds0是上面配置的数据源名称  classes_$->{0..1}表示的是表名称的表达式
          key-generator:  #主键生成策略
            column: id  # 主键
            type: SNOWFLAKE # 主键的生成策略,雪花算法
          table-strategy:
            inline:
              sharding-column: id  #分片的列名
              algorithm-expression: classes_$->{id % 2}  #分片的策略
    props:
      sql:
        show: true # 输出日志

水平分表配置

spring:
  application:
    name: sharding-jdbc-test
  shardingsphere:
    datasource:
      names: ds0  # 配置数据源,给数据源起名
      ds0:  # 配置数据源具体内容,连接池、驱动、地址、用户名、密码
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mybatis?useSSL=false
        username: root
        password: 123456
    sharding:
      tables:
        classes:  # 这个classes是表名
          actual-data-nodes: ds0.classes_$->{0..1} #设置classes表的分布,表在哪个数据库中  ds0是上面配置的数据源名称  classes_$->{0..1}表示的是表名称的表达式
          key-generator:  #主键生成策略
            column: id  # 主键
            type: SNOWFLAKE # 主键的生成策略,雪花算法
          table-strategy:
            inline:
              sharding-column: id  #分片的列名
              algorithm-expression: classes_$->{id % 2}  #分片的策略
    props:
      sql:
        show: true # 输出日志