ShardingJDBC5.3实现读写分离

ShardingJDBC5.3实现读写分离

引言

这篇文章是在我们配置完mysql的主从之后,才能进行的。关于mysql的主从配置请看我的mysql分类中的文章。

开始

首先我们先基于springboot构建一个项目,这里我就不演示了。就以我的服务douyu-live-user-provider为例子

首先我们在application.yml 中配置

spring:
  application:
    name: douyu-live-user-provider
  datasource:
    driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver
    url: jdbc:shardingsphere:classpath:douyu-db-sharding.yaml
    hikari:
      pool-name: douyu-user-pool
      minimum-idle: 150
      maximum-pool-size: 300
      connection-timeout: 4000
      max-lifetime: 60000
douyu-db-sharding.yaml

dataSources:
  user_master: ##新表,重建的分表
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://127.0.0.1:3306/douyu_live_user?useUnicode=true&characterEncoding=utf8
    username: root
    password: root
  user_slave0: ##新表,重建的分表
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbcUrl: jdbc:mysql://127.0.0.1:3309/douyu_live_user?useUnicode=true&characterEncoding=utf8
    username: root
    password: root
rules:
  - !READWRITE_SPLITTING
    dataSources:
      user_ds:
        staticStrategy:
          writeDataSourceName: user_master
          readDataSourceNames:
            - user_slave0
  - !SINGLE
    defaultDataSource: user_ds  ## 不分表分分库的默认数据源
  - !SHARDING
    tables:
      t_user:
        actualDataNodes: user_ds.t_user_${(0..99).collect(){it.toString().padLeft(2,'0')}}
        tableStrategy:
          standard:
            shardingColumn: user_id
            shardingAlgorithmName: t_user-inline
    shardingAlgorithms:
      t_user-inline:
        type: INLINE
        props:
          algorithm-expression: t_user_${(user_id %100).toString().padLeft(2,'0')}
props:
  sql-show: true


LICENSED UNDER CC BY-NC-SA 4.0