当前位置:   article > 正文

ShardingSphere5.0自定义分表策略_sharding5 分表策略语法

sharding5 分表策略语法

 需要根据SPI来注入

META-INF/services/org.apache.shardingsphere.sharding.spi.ShardingAlgorithm

内容:com.example.user.sharding.UserIdSharding

Java代码

  1. @Data
  2. public class UserIdSharding implements StandardShardingAlgorithm<String> {
  3. private static final String SHARDING_COUNT_KEY = "sharding-count";
  4. /**
  5. * 对应props配置
  6. */
  7. private Properties props = new Properties();
  8. private int shardingCount;
  9. /**
  10. * 初始化调用
  11. */
  12. @Override
  13. public void init() {
  14. shardingCount = getShardingCount();
  15. }
  16. private int getShardingCount() {
  17. Preconditions.checkArgument(props.containsKey(SHARDING_COUNT_KEY), "Sharding count cannot be null.");
  18. return Integer.parseInt(props.get(SHARDING_COUNT_KEY).toString());
  19. }
  20. /**
  21. * Standard Sharding
  22. * @param availableTargetNames real table
  23. * @param preciseShardingValue Single Sharding key
  24. * @return
  25. */
  26. @Override
  27. public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<String> preciseShardingValue) {
  28. long l = Long.parseLong(preciseShardingValue.getValue()) % shardingCount;
  29. for (String availableTargetName : availableTargetNames) {
  30. if (availableTargetName.endsWith(String.valueOf(l))) {
  31. return availableTargetName;
  32. }
  33. }
  34. return null;
  35. }
  36. /**
  37. * Complex Sharding
  38. * @param availableTargetNames real table
  39. * @param rangeShardingValue Multiple Sharding Key
  40. * @return
  41. */
  42. @Override
  43. public Collection<String> doSharding(Collection<String> availableTargetNames, RangeShardingValue<String> rangeShardingValue) {
  44. return null;
  45. }
  46. /**
  47. * SPI根据配置Type获取
  48. * @return
  49. */
  50. @Override
  51. public String getType() {
  52. return "USER_ID";
  53. }

配置

  1. spring:
  2. config:
  3. activate:
  4. on-profile: prod
  5. shardingsphere:
  6. datasource:
  7. names: master,slave
  8. master:
  9. type: com.alibaba.druid.pool.DruidDataSource
  10. driver-class-name: com.mysql.cj.jdbc.Driver
  11. url: jdbc:mysql://asus:3306/auth_db?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false
  12. username: auth_user
  13. password: zxc521cxzPass!
  14. slave:
  15. type: com.alibaba.druid.pool.DruidDataSource # 数据库配置,配置属性名 不同连接池,连接名不一样。根据数据库连接池DataSource来配置
  16. driver-class-name: com.mysql.cj.jdbc.Driver
  17. url: jdbc:mysql://dell:3306/auth_db?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&useSSL=false
  18. username: auth_user
  19. password: zxc521cxzPass!
  20. props:
  21. sql-show: true
  22. rules:
  23. readwrite-splitting:
  24. load-balancers:
  25. roundRobin:
  26. type: ROUND_ROBIN #从库路由算法,ROUND_ROBIN:轮询,RANDOM:随机
  27. data-sources:
  28. read-write_0:
  29. #自动发现数据源名称(配置动态读写分离规则显示),库中不配置则读写分离不生效,不配置则为静态分离,可以动态扩容。
  30. #只支持MySQL的自动发现,可以拓展成根据配置进行动态扩容?
  31. #auto_aware_data_source_name
  32. load-balancer-name: roundRobin #轮询算法
  33. read-data-source-names: slave #读库
  34. write-data-source-name: master #写库
  35. sharding:
  36. tables:
  37. users:
  38. table-strategy:
  39. standard:
  40. sharding-algorithm-name: table-inline
  41. sharding-column: user_id
  42. actual-data-nodes: read-write_0.users_$->{0..1} #read-write_0 为读写分离的逻辑表明
  43. sharding-algorithms:
  44. table-inline:
  45. type: USER_ID
  46. props:
  47. sharding-count: 2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/756815
推荐阅读
相关标签
  

闽ICP备14008679号