Springboot-Sharding-Jdbc集成(三)读写分离+数据分片

天空是蓝色的, 太阳是黄色的 大地是棕色的 海洋是蓝色的 草是绿色的 鲜花是五颜六色的 心跳是红色的❤️ 而你是属于我世界的颜色


 一.pom.xml文件引入

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.4.2</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>
   <groupId>com.yy</groupId>
   <artifactId>springboot-sharding-jdbc</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>springboot-sharding-jdbc</name>
   <description>Demo project for Spring Boot</description>
   <properties>
      <java.version>1.8</java.version>
      <spring-cloud.version>2020.0.1</spring-cloud.version>
      <spring-cloud-alibab.version>2021.1</spring-cloud-alibab.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-bootstrap</artifactId>
      </dependency>

      <!--nacos 服务发现-->
      <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      <!--nacos 配置管理-->
      <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-jdbc</artifactId>
         <version>2.5.6</version>
      </dependency>

      <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <scope>runtime</scope>
      </dependency>

      <!--shaeding-jdbc-->
      <dependency>
         <groupId>org.apache.shardingsphere</groupId>
         <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
         <version>4.0.0-RC1</version>
      </dependency>
      <dependency>
         <groupId>io.shardingsphere</groupId>
         <artifactId>sharding-jdbc-spring-namespace</artifactId>
         <version>3.1.0</version>
      </dependency>

      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.1.20</version>
         <scope>compile</scope>
      </dependency>

      <!--mybatis-plu-->
      <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.2.0</version>
      </dependency>
      <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-generator</artifactId>
         <version>3.2.0</version>
      </dependency>
      <dependency>
         <groupId>org.freemarker</groupId>
         <artifactId>freemarker</artifactId>
         <version>2.3.28</version>
      </dependency>

      <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupId>cn.hutool</groupId>
         <artifactId>hutool-all</artifactId>
         <version>5.5.8</version>
      </dependency>

      <!--swagger生成在线接口文档-->
      <dependency>
         <groupId>io.springfox</groupId>
         <artifactId>springfox-swagger2</artifactId>
         <version>2.7.0</version>
      </dependency>
      <dependency>
         <groupId>io.springfox</groupId>
         <artifactId>springfox-swagger-ui</artifactId>
         <version>2.7.0</version>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>



   </dependencies>

   <dependencyManagement>
      <!--如果要使用Spring Cloud 的组件都需要在pom.xml中添加如下的配置;-->
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
         <!--如果要使用Spring Cloud Alibaba 的组件都需要在pom.xml中添加如下的配置;-->
         <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibab.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>


   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

   <repositories>
      <repository>
         <id>public</id>
         <name>aliyun nexus</name>
         <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
         <releases>
            <enabled>true</enabled>
         </releases>
      </repository>
   </repositories>

   <pluginRepositories>
      <pluginRepository>
         <id>public</id>
         <name>aliyun nexus</name>
         <url>http://maven.aliyun.com/nexus/content/groups/public//</url>
         <releases>
            <enabled>true</enabled>
         </releases>
         <snapshots>
            <enabled>false</enabled>
         </snapshots>
      </pluginRepository>
   </pluginRepositories>

</project>

二.配置文件

1.数据分片application-fp.yml配置文件

# sharding-jdbc 4.0 配置数据分片
spring:
  shardingsphere:
    # 显示sql
    props:
      sql:
        show: true
    # 配置数据源
    datasource:
      names: ds0,ds1
      ds0:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://IP:13311/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        minPoolSize: 5
      ds1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://IP:13312/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        minPoolSize: 5
      ds:
        maxPoolSize: 100
    sharding:
      # 配置默认数据源ds0 默认数据源,主要用于写
      default-data-source-name: ds0
      # 配置默认分库策略
      defaultDatabaseStrategy:
        inline:
          shardingColumn: sex
          algorithmExpression: ds$->{sex % 2}
      # 配置默认分表策略
      defaultTableStrategy:
        inline:
          sharding-column: age
          algorithm-expression: t_user$->{age % 2}
      # inline分片策略实现分库分表
      tables:
        t_user:
          # 多数据源$->{0..N}.逻辑表名$->{0..N} 相同表  ds$->{1..3}.t_user$->{0..1}
          # 多数据源$->{0..N}.逻辑表名$->{0..N} 不同表  ds0.t_user$->{0..1},ds1.t_user$->{2..4}
          # 单数据源的配置方式 ds0.t_user$->{0..4}
          # actual-data-nodes: ds$->{0..1}.t_user$->{0..1}
          # 配置分库策略-根据性别奇数存储在ds1,偶数ds0
          database-strategy:
            inline:
              sharding-column: sex
              algorithm-expression: ds$->{sex % 2}
          # 配置分表策略-根据年龄奇数存储在t_user1,偶数t_user0
          table-strategy:
            inline:
              sharding-column: age
              algorithm-expression: t_user$->{age % 2}
          # 主键的列名;默认使用雪花算法,生成64bit的长整型数据,也支持UUID的方式。
          key-generator:
            # 主键的列名
            column: id
            # 主键生成策略 UUID  SNOWFLAKE 符号位(1bit) 时间戳位(41bit)
            type: SNOWFLAKE
 

2.读写分离+数据分片application-rw-fp.yml

# sharding-jdbc 4.0 配置读写分离+数据分片
# 根据年龄奇数存储在t_user1,偶数t_user0,同时性别奇数存储在ds1,偶数ds0。
spring:
  shardingsphere:
    # 显示sql
    props:
      sql:
        show: true
    # 配置数据源
    datasource:
      names: dm0,ds1,ds2,dm1,ds3,ds4
      # master-dm0数据库连接信息
      dm0:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://IP:13311/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        maxPoolSize: 100
        minPoolSize: 5
      # slave-ds1数据库连接信息
      ds1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://IP:13312/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        maxPoolSize: 100
        minPoolSize: 5
      # slave-ds2数据库连接信息
      ds2:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://IP:13312/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        minPoolSize: 5
      # master-dm1数据库连接信息
      dm1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://IP:13311/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        maxPoolSize: 100
        minPoolSize: 5
      # slave-ds3数据库连接信息
      ds3:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://IP:13312/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        maxPoolSize: 100
        minPoolSize: 5
      # slave-ds5数据库连接信息
      ds4:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql:/IP:13312/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
        minPoolSize: 5
      ds:
        maxPoolSize: 100
    sharding:
      # 配置默认数据源ds0 默认数据源,主要用于写
      default-data-source-name: dm0
      # 配置默认分库策略
      defaultDatabaseStrategy:
        inline:
          shardingColumn: sex
          algorithmExpression: dm$->{sex % 2}
      # 配置默认分表策略
      defaultTableStrategy:
        inline:
          sharding-column: age
          algorithm-expression: t_user$->{age % 2}
      # inline分片策略实现分库分表
      tables:
        t_user:
          # 多数据源$->{0..N}.逻辑表名$->{0..N} 相同表  ds$->{1..3}.t_user$->{0..1}
          # 多数据源$->{0..N}.逻辑表名$->{0..N} 不同表  ds0.t_user$->{0..1},ds1.t_user$->{2..4}
          # 单数据源的配置方式 ds0.t_user$->{0..4}
          # actual-data-nodes: ds$->{0..1}.t_user$->{0..1}
          # 配置分库策略-根据性别奇数存储在ds1,偶数ds0
          database-strategy:
            inline:
              sharding-column: sex
              algorithm-expression: dm$->{sex % 2}
          # 配置分表策略-根据年龄奇数存储在t_user1,偶数t_user0
          table-strategy:
            inline:
              sharding-column: age
              algorithm-expression: t_user$->{age % 2}
          # 主键的列名;默认使用雪花算法,生成64bit的长整型数据,也支持UUID的方式。
          key-generator:
            # 主键的列名
            column: id
            # 主键生成策略 UUID  SNOWFLAKE 符号位(1bit) 时间戳位(41bit)
            type: SNOWFLAKE
      # 配置多个读写分离;如果查询不匹配规则会有重复
#      masterSlaveRules:
#        # 配置主从名称
#        dm-ms0:
#          # 配置主库master,负责数据的写入
#          masterDataSourceName: dm0
#          # 配置从库slave节点
#          slaveDataSourceNames:
#            - ds1
#            - ds2
#          # 配置slave节点的负载均衡均衡策略,采用轮询机制
#          loadBalanceAlgorithmType: ROUND_ROBIN
#        dm-ms1:
#          masterDataSourceName: dm1
#          slaveDataSourceNames:
#            - ds3
#            - ds4
#          loadBalanceAlgorithmType: ROUND_ROBIN
 
    # 读写分离 单个读写分离
    masterslave:
      # 配置主从名称
      name: ds-ms
      # 配置主库master,负责数据的写入
      master-data-source-name: dm0,dm1
      # 配置从库slave节点
      slave-data-source-names: ds1,ds2,ds3,ds4
      # 配置slave节点的负载均衡均衡策略,采用轮询机制
      load-balance-algorithm-type: round_robin
 

其他项目文件可以参考前一篇文章!!!

三.验证读写分离+数据分片

1.测试类

/**
 * 根据性别奇数存储在ds1,偶数ds0
 * 根据年龄奇数存储在t_user1,偶数t_user0
 */
@SpringBootTest
class SpringbootShardingJdbcApplicationTests {
 
	@Autowired
	private UserMapper userMapper;
 
 
	/**
	 * sex:奇数
	 * age:奇数
	 * ds1.t_user1
	 */
	@Test
	public void test01() {
		User user = new User();
		user.setNickname("JueDream" + new Random().nextInt());
		user.setPassword("sefgsdg");
		user.setAge(17);
		user.setSex(1);
		user.setBirthday("1997-12-03");
		userMapper.insert(user);
	}
 
	/**
	 * sex:奇数
	 * age:偶数
	 * ds1.t_user0
	 */
	@Test
	public void test02() {
		User user = new User();
		user.setNickname("JueDream" + new Random().nextInt());
		user.setPassword("123456");
		user.setAge(18);
		user.setSex(1);
		user.setBirthday("1997-12-03");
		userMapper.insert(user);
	}
 
	/**
	 * sex:偶数
	 * age:奇数
	 * ds0.t_user1
	 */
	@Test
	public void test03() {
		User user = new User();
		user.setNickname("JueDream" + new Random().nextInt());
		user.setPassword("123456");
		user.setAge(17);
		user.setSex(2);
		user.setBirthday("1997-12-03");
		userMapper.insert(user);
	}
 
	/**
	 * sex:偶数
	 * age:偶数
	 * ds0.t_user0
	 */
	@Test
	public void test04() {
		User user = new User();
		user.setNickname("JueDream" + new Random().nextInt());
		user.setPassword("123456");
		user.setAge(18);
		user.setSex(2);
		user.setBirthday("1997-12-03");
		userMapper.insert(user);
	}
}

下面给出一份完整的sharding-jdbc的配置文件供参考!!

# !! 表示实例化该类
#
# - 表示可以包含一个或多个
#
# [] 表示数组,可以与减号相互替换使用
spring:
  # 以下配置截止版本为3.1
  # 配置文件中,必须配置的项目为schemaName,dataSources,并且sharidngRule,masterSlaveRule,配置其中一个(注意,除非server.yaml中定义了Orchestration,否则必须至少有一个config-xxxx配置文件),除此之外的其他项目为可选项
  schemaName: test # schema名称,每个文件都是单独的schema,多个schema则是多个yaml文件,yaml文件命名要求是config-xxxx.yaml格式,虽然没有强制要求,但推荐名称中的xxxx与配置的schemaName保持一致,方便维护
 
  dataSources: # 配置数据源列表,必须是有效的jdbc配置,目前仅支持MySQL与PostgreSQL,另外通过一些未公开(代码中可查,但可能会在未来有变化)的变量,可以配置来兼容其他支持JDBC的数据库,但由于没有足够的测试支持,可能会有严重的兼容性问题,配置时候要求至少有一个
    master_ds_0: # 数据源名称,可以是合法的字符串,目前的校验规则中,没有强制性要求,只要是合法的yaml字符串即可,但如果要用于分库分表配置,则需要有有意义的标志(在分库分表配置中详述),以下为目前公开的合法配置项目,不包含内部配置参数
      # 以下参数为必备参数
      url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_1?serverTimezone=UTC&useSSL=false # 这里的要求合法的jdbc连接串即可,目前尚未兼容MySQL 8.x,需要在maven编译时候,升级MySQL JDBC版本到5.1.46或者47版本(不建议升级到JDBC的8.x系列版本,需要修改源代码,并且无法通过很多测试case)
      username: root # MySQL用户名
      password: password # MySQL用户的明文密码
      # 以下参数为可选参数,给出示例为默认配置,主要用于连接池控制
      connectionTimeoutMilliseconds: 30000 #连接超时控制
      idleTimeoutMilliseconds: 60000 # 连接空闲时间设置
      maxLifetimeMilliseconds: 0 # 连接的最大持有时间,0为无限制
      maxPoolSize: 50 # 连接池中最大维持的连接数量
      minPoolSize: 1 # 连接池的最小连接数量
      maintenanceIntervalMilliseconds: 30000 # 连接维护的时间间隔 atomikos框架需求
    # 以下配置的假设是,3307是3306的从库,3309,3310是3308的从库
    slave_ds_0:
      url: jdbc:mysql://127.0.0.1:3307/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
      username: root
      password: password
    master_ds_1:
      url: jdbc:mysql://127.0.0.1:3308/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
      username: root
      password: password
    slave_ds_1:
      url: jdbc:mysql://127.0.0.1:3309/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
      username: root
      password: password
    slave_ds_1_slave2:
      url: jdbc:mysql://127.0.0.1:3310/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
      username: root
      password: password
  masterSlaveRule: # 这里配置这个规则的话,相当于是全局读写分离配置
    name: ds_rw # 名称,合法的字符串即可,但如果涉及到在读写分离的基础上设置分库分表,则名称需要有意义才可以,另外,虽然目前没有强制要求,但主从库配置需要配置在实际关联的主从库上,如果配置的数据源之间主从是断开的状态,那么可能会发生写入的数据对于只读会话无法读取到的问题
    # 如果一个会话发生了写入并且没有提交(显式打开事务),sharidng sphere在后续的路由中,select都会在主库执行,直到会话提交
    masterDataSourceName: master_ds_0 # 主库的DataSource名称
    slaveDataSourceNames: # 从库的DataSource列表,至少需要有一个
      - slave_ds_0
    loadBalanceAlgorithmClassName: org.apache.shardingsphere.api.algorithm.masterslave # MasterSlaveLoadBalanceAlgorithm接口的实现类,允许自定义实现 默认提供两个,配置路径为org.apache.shardingsphere.api.algorithm.masterslave下的RandomMasterSlaveLoadBalanceAlgorithm(随机Random)与RoundRobinMasterSlaveLoadBalanceAlgorithm(轮询:次数%从库数量)
    loadBalanceAlgorithmType: #从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若loadBalanceAlgorithmClassName存在则忽略该配置,默认为ROUND_ROBIN
 
  shardingRule: # sharding的配置
    # 配置主要分两类,一类是对整个sharding规则所有表生效的默认配置,一个是sharing具体某张表时候的配置
    # 首先说默认配置
    masterSlaveRules: # 在shardingRule中也可以配置shardingRule,对分片生效,具体内容与全局masterSlaveRule一致,但语法为:
      master_test_0:
        masterDataSourceName: master_ds_0
        slaveDataSourceNames:
          - slave_ds_0
      master_test_1:
        masterDataSourceName: master_ds_1
        slaveDataSourceNames:
          - slave_ds_1
          - slave_ds_1_slave2
    defaultDataSourceName: master_test_0 # 这里的数据源允许是dataSources的配置项目或者masterSlaveRules配置的名称,配置为masterSlaveRule的话相当于就是配置读写分离了
    broadcastTables: # 广播表 这里配置的表列表,对于发生的所有数据变更,都会不经sharidng处理,而是直接发送到所有数据节点,注意此处为列表,每个项目为一个表名称
      - broad_1
      - broad_2
    bindingTables: # 绑定表,也就是实际上哪些配置的sharidng表规则需要实际生效的列表,配置为yaml列表,并且允许单个条目中以逗号切割,所配置表必须已经配置为逻辑表
      - sharding_t1
      - sharding_t2,sharding_t3
    defaultDatabaseShardingStrategy: # 默认库级别sharidng规则,对应代码中ShardingStrategy接口的实现类,目前支持none,inline,hint,complex,standard五种配置 注意此处默认配置仅可以配置五个中的一个
      # 规则配置同样适合表sharding配置,同样是在这些算法中选择
      none: # 不配置任何规则,SQL会被发给所有节点去执行,这个规则没有子项目可以配置
      inline: # 行表达式分片
        shardingColumn: test_id # 分片列名称,目前只支持单列分片,多字段使用 complex方式
        algorithmExpression: master_test_${test_id % 2} # 分片表达式,根据指定的表达式计算得到需要路由到的数据源名称 需要是合法的groovy表达式,示例配置中,取余为0则语句路由到master_test_0,取余为1则路由到master_test_1
      hint: #基于标记的sharding分片
        shardingAlgorithm: # 需要是HintShardingAlgorithm接口的实现,目前代码中,仅有为测试目的实现的OrderDatabaseHintShardingAlgorithm,没有生产环境可用的实现
      complex: # 支持多列的shariding,目前无生产可用实现
        shardingColumns: # 逗号切割的列
        algorithmClassName: # ComplexKeysShardingAlgorithm接口的实现类,使用全路径类名
      standard: # 单列sharidng算法,需要配合对应的preciseShardingAlgorithm,rangeShardingAlgorithm接口的实现使用,目前无生产可用实现
        shardingColumn: # 列名,允许单列
        preciseAlgorithmClassName: # preciseShardingAlgorithm接口的实现类,用于 `=` and `IN` 情况下的分表算法
        rangeAlgorithmClassName: # rangeShardingAlgorithm接口的实现类,用于 `BETWEEN` 情况下的分表算法
    defaultTableStrategy: #配置参考defaultDatabaseShardingStrategy,区别在于,inline算法的配置中,algorithmExpression的配置算法结果需要是实际的物理表名称,而非数据源名称
    defaultKeyGenerator: #默认的主键生成算法 如果没有设置,默认为SNOWFLAKE算法
      column: # 自增键对应的列名称
      type: #自增键的类型,主要用于调用内置的主键生成算法有三个可用值:SNOWFLAKE(时间戳+worker id+自增id),UUID(java.util.UUID类生成的随机UUID),LEAF,其中Snowflake算法与UUID算法已经实现,LEAF目前(2018-01-14)尚未实现
      props:
      # 属性配置, 注意:使用SNOWFLAKE算法,需要配置worker.id与max.tolerate.time.difference.milliseconds属性
    tables: #配置表sharding的主要位置
      sharding_t1:
        actualDataNodes: master_test_${0..1}.t_order${0..1} # sharidng 表对应的数据源以及物理名称,需要用表达式处理,表示表实际上在哪些数据源存在,配置示例中,意思是总共存在4个分片master_test_0.t_order0,master_test_0.t_order1,master_test_1.t_order0,master_test_1.t_order1
        # 需要注意的是,必须保证设置databaseStrategy可以路由到唯一的dataSource,tableStrategy可以路由到dataSource中唯一的物理表上,否则可能导致错误:一个insert语句被插入到多个实际物理表中
        databaseStrategy: # 局部设置会覆盖全局设置,参考defaultDatabaseShardingStrategy
        tableStrategy: # 局部设置会覆盖全局设置,参考defaultTableStrategy
        keyGenerator: # 局部设置会覆盖全局设置,参考defaultKeyGenerator
        logicIndex: # 逻辑索引名称 由于Oracle,PG这种数据库中,索引与表共用命名空间,如果接受到drop index语句,执行之前,会通过这个名称配置的确定对应的实际物理表名称
  props:
    sql.show: #是否开启SQL显示,默认值: false
    acceptor.size: # accept连接的线程数量,默认为cpu核数2倍
    executor.size: #工作线程数量最大,默认值: 无限制
    max.connections.size.per.query: # 每个查询可以打开的最大连接数量,默认为1
    proxy.frontend.flush.threshold: # proxy的服务时候,对于单个大查询,每多少个网络包返回一次
    check.table.metadata.enabled: #是否在启动时检查分表元数据一致性,默认值: false
    proxy.transaction.type: # 默认LOCAL,proxy的事务模型 允许LOCAL,XA,BASE三个值 LOCAL无分布式事务,XA则是采用atomikos实现的分布式事务 BASE目前尚未实现
    proxy.opentracing.enabled: # 是否启用opentracing
    proxy.backend.use.nio: # 是否采用netty的NIO机制连接后端数据库,默认False ,使用epoll机制
    proxy.backend.max.connections: # 使用NIO而非epoll的话,proxy后台连接每个netty客户端允许的最大连接数量(注意不是数据库连接限制) 默认为8
    proxy.backend.connection.timeout.seconds: #使用nio而非epoll的话,proxy后台连接的超时时间,默认60s
    check.table.metadata.enabled: # 是否在启动时候,检查sharing的表的实际元数据是否一致,默认False
 
  ### 读写分离
 
  #  ```yaml
  dataSources: #省略数据源配置,与数据分片一致
 
  masterSlaveRule:
    name: #读写分离数据源名称
    masterDataSourceName: #主库数据源名称
    slaveDataSourceNames: #从库数据源名称列表
      - <data_source_name1>
      - <data_source_name2>
      - <data_source_name_x>
    loadBalanceAlgorithmClassName: #从库负载均衡算法类名称。该类需实现MasterSlaveLoadBalanceAlgorithm接口且提供无参数构造器
    loadBalanceAlgorithmType: #从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若`loadBalanceAlgorithmClassName`存在则忽略该配置
 
  props: #属性配置
    sql.show: #是否开启SQL显示,默认值: false
    executor.size: #工作线程数量,默认值: CPU核数
    check.table.metadata.enabled: #是否在启动时检查分表元数据一致性,默认值: false
 
# 数据脱敏
shardingRule: #省略分片规则配
  encryptRule:
    encryptors:
      encryptor_name: #加密器名字
        type: #加解密器类型,可自定义或选择内置类型:MD5/AES
        qualifiedColumns: #加解密字段,格式为:表名.列名,例如:tb.col1。多个列,请用逗号分隔
        assistedQueryColumns: #辅助查询字段,针对ShardingQueryAssistedEncryptor类型的加解密器进行辅助查询
        props: #属性配置, 注意:使用AES加密器,需要配置AES加密器的KEY属性:aes.key.value
          aes.key.value:
 
# 治理
orchestration:
  name: #治理实例名称
  overwrite: #本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准
  registry: #注册中心配置
    serverLists: #连接注册中心服务器的列表。包括IP地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
    namespace: #注册中心的命名空间
    digest: #连接注册中心的权限令牌。缺省为不需要权限验证
    operationTimeoutMilliseconds: #操作超时的毫秒数,默认500毫秒
    maxRetries: #连接失败后的最大重试次数,默认3次
    retryIntervalMilliseconds: #重试间隔毫秒数,默认500毫秒
    timeToLiveSeconds: #临时节点存活秒数,默认60秒

与你分享过青春,不比初恋少半条!

Guess you like

Origin blog.csdn.net/qq_35731570/article/details/121393480
Recommended