ShardingSphere|shardingJDBC - 在使用数据分片功能情况下无法配置读写分离

问题场景:

        最近在学习ShardingSphere,跟着教程一步步做shardingJDBC,但是想在开启数据分片的时候还能使用读写分离,一直失败,开始是一直能读写分离,但是分偏见规则感觉不生效,一直好像是走不进去[sharding]这个配置中,后来debug调试可以找到相关配置,又感觉是什么代码给覆盖了或者不生效了。

问题解决:

        后来找资料一直没有,看到教程下有人一直在问读写分离和数据分片没法一起使用吗?我就试了下关闭读写分离,真的就可以数据分片了,后来查资料:

单独的读写分离配置之后,数据分片就无法生效了,是两块分开的单独功能;如果既想使用读写分离又想数据分片,可以使用如下配置,主要看sharding->master-slave-rules设置。

spring:
  shardingsphere:
    props:
      sql:
        show: true # 参数配置,显示sql
    datasource: # 配置数据源
      # 给每个数据源取别名,下面的ds1,ds2,ds3任意取名字
      names: master,salve1
      # 给master-ds1每个数据源配置数据库连接信息
      master:
        # 配置druid数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3307/springboot?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT
        username: root
        password: root
        maxPoolSize: 100
        minPoolSize: 5
      # 配置ds2-slave
      salve1:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3308/springboot?useUnicode=true&characterEncoding=utf8&tinyInt1isBit=false&useSSL=false&serverTimezone=GMT
        username: root
        password: root
        maxPoolSize: 100
        minPoolSize: 5
      # 配置默认数据源
      masterslave: # 配置数据源的读写分离,但是数据库一定要做主从复制
        # 配置主从名称,可以任意取名字
        name: ms
        # 配置主库master,负责数据的写入
        master-data-source-name: master
        # 配置从库slave节点
        slave-data-source-names: salve1
        # 配置slave节点的负载均衡均衡策略,采用轮询机制
        load-balance-algorithm-type: round_robin
    sharding:
      master-slave-rules:                 # 在使用数据分片功能情况下,配置读写分离功能
        ds0:                              # 自定义一个虚拟数据源名字,用于自动路由下方主从数据源
          masterDataSourceName: master    # 指定主数据源
          slaveDataSourceNames:           # 指定从数据源
            - salve1
          loadBalanceAlgorithmType: round_robin
        binding-tables:
          - fa_user                            # 指明了分库分表要处理的虚拟表名字
      tables:
          # user_table 逻辑表名
          fa_user:
            # 数据节点:数据源$->{0..N}.逻辑表名$->{0..N}
            actualDataNodes: ds0.fa_user_$->{2022..2023}
            # 拆分库策略
#            database-strategy:
#              standard:
#                sharding-column: create_time
#                precise-algorithm-class-name: com.wpj.user.shardingSphere.UserDataBaseRule
            # 拆分表策略
            table-strategy:
              standard:
                sharding-column: create_time
                precise-algorithm-class-name: com.wpj.user.shardingSphere.UserTableRule

你可能感兴趣的:(JAVA,读写分离,分库分表,数据分片不生效,shardingJDBC,ShardingSphere)