Sharding-JDBC分库分表以及读写分离

官网:https://shardingsphere.apache.org/document/current/cn/manual/sharding-jdbc/configuration/config-yaml/

依赖:

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

application.yml配置

############ 读写分离 sharding + mybatis-plus ################
spring:
  # ShardingSphere 配置项
  shardingsphere:
    # 数据源配置
    datasource:
      # 所有数据源的名字
      names: ds-master, ds-slave-1, ds-slave-2
      # 订单 orders 主库的数据源配置
      ds-master:
        type: org.apache.commons.dbcp.BasicDataSource # 使用 dbcp 数据库连接池
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/test_orders?useSSL=false&useUnicode=true&characterEncoding=UTF-8
        username: root
        password: 111
      # 订单 orders 从库数据源配置
      ds-slave-1:
        type: org.apache.commons.dbcp.BasicDataSource # 使用 dbcp 数据库连接池
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/test_orders_01?useSSL=false&useUnicode=true&characterEncoding=UTF-8
        username: root
        password: 111
      # 订单 orders 从库数据源配置
      ds-slave-2:
        type: org.apache.commons.dbcp.BasicDataSource # 使用 dbcp 数据库连接池
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/test_orders_02?useSSL=false&useUnicode=true&characterEncoding=UTF-8
        username: root
        password: 111
    # 读写分离配置,对应 YamlMasterSlaveRuleConfiguration 配置类
    masterslave:
      name: ms # 名字,任意,需要保证唯一
      master-data-source-name: ds-master # 主库数据源
      slave-data-source-names: ds-slave-1, ds-slave-2 # 从库数据源
    # 拓展属性配置
    props:
      sql:
        show: true # 打印 SQL

# mybatis-plus 配置内容
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
  global-config:
    db-config:
      id-type: none # 虽然 MyBatis Plus 也提供 ID 生成策略,但是还是使用 Sharding-JDBC 的
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: org.zhire.sharding.model

############### 分库分表 #############
#spring:
#  # ShardingSphere 配置项
#  shardingsphere:
#    datasource:
#      # 所有数据源的名字
#      names: ds0, ds1
#      # 订单 orders 数据源配置 00
#      ds0:
#        #        type: com.zaxxer.hikari.HikariDataSource # 使用 Hikari 数据库连接池
#        #        type: com.alibaba.druid.pool.DruidDataSource # 使用 druid 数据库连接池
#        type: org.apache.commons.dbcp.BasicDataSource # 使用 dbcp 数据库连接池
#        driver-class-name: com.mysql.jdbc.Driver
#        url: jdbc:mysql://127.0.0.1:3306/ds0?useSSL=false&useUnicode=true&characterEncoding=UTF-8
#        username: root
#        password: 111
#      # 订单 orders 数据源配置 01
#      ds1:
#        type: org.apache.commons.dbcp.BasicDataSource # 使用 dbcp 数据库连接池
#        driver-class-name: com.mysql.jdbc.Driver
#        url: jdbc:mysql://127.0.0.1:3306/ds1?useSSL=false&useUnicode=true&characterEncoding=UTF-8
#        username: root
#        password: 111
#    # 分片规则
#    sharding:
#      tables:
#        # orders 表配置 (逻辑表。即xml下执行sql语句的表)
#        orders:
#          actualDataNodes: ds0.orders_$->{[0,1]}, ds1.orders_$->{[0,1]} # 映射到 ds0 和 ds1 数据源的 orders 表
#          key-generator: # 主键生成策略
#            column: id
#            type: SNOWFLAKE
#          database-strategy:  # 分库规则
#            inline:
#              algorithm-expression: ds$->{user_id % 2}
#              sharding-column: user_id
#          table-strategy: # 分表规则
#            inline:
#              algorithm-expression: orders_$->{user_id % 2}
#              sharding-column: user_id
#        # order_config 表配置
#        order_config:
#          actualDataNodes: ds0.order_config # 仅映射到 ds0 数据源的 order_config 表
#    # 拓展属性配置
#    props:
#      sql:
#        show: true # 打印 SQL

详见git:https://github.com/c-qi/sharding

Last modification:April 20th, 2020 at 06:56 pm