From d096953776519f10cf99e73b9d019a3c4aa5cabe Mon Sep 17 00:00:00 2001 From: luliqiang <kidgrow> Date: Wed, 24 Mar 2021 19:07:50 +0800 Subject: [PATCH] 1、完善哈希表后缀生成方法 2、增加哈希表后缀生成工具类(只传入字符串参数,其他参数用方法中的默认值) --- kidgrow-commons/kidgrow-db-spring-boot-starter/src/main/java/com/kidgrow/db/sharding/HashModTableSuffix.java | 19 ++++++--- kidgrow-commons/kidgrow-db-spring-boot-starter/src/main/java/com/kidgrow/db/utils/TableSuffixUtil.java | 50 +++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/kidgrow-commons/kidgrow-db-spring-boot-starter/src/main/java/com/kidgrow/db/sharding/HashModTableSuffix.java b/kidgrow-commons/kidgrow-db-spring-boot-starter/src/main/java/com/kidgrow/db/sharding/HashModTableSuffix.java index 14a5d3d..f9686b1 100644 --- a/kidgrow-commons/kidgrow-db-spring-boot-starter/src/main/java/com/kidgrow/db/sharding/HashModTableSuffix.java +++ b/kidgrow-commons/kidgrow-db-spring-boot-starter/src/main/java/com/kidgrow/db/sharding/HashModTableSuffix.java @@ -13,21 +13,28 @@ public class HashModTableSuffix implements TableSuffix { private String hash; - private Long tableSize = 64L; - private String tableSuffix="-000"; + private Long tableSize = 128L; + private String tableSuffix="_000"; public HashModTableSuffix(String hash,long tableSize, String tableSuffix) { if (StringUtils.isEmpty(hash)) { throw new IllegalArgumentException("hash should not be null or empty"); + } else { + this.hash = hash; } - this.hash = hash; - this.tableSize=tableSize; - this.tableSuffix=tableSuffix; + if (tableSize != 0) { + this.tableSize = tableSize; + } + if (!StringUtils.isEmpty(tableSuffix)) { + this.tableSuffix=tableSuffix; + } + } @Override public String getSuffix() { String format = "%0" + (tableSuffix.length() - 1) + "d"; - return "_"+String.format(format, Math.abs(hash.hashCode()) % tableSize); + return tableSuffix.substring(0,1)+String.format(format, Math.abs(hash.hashCode()) % tableSize); } + } diff --git a/kidgrow-commons/kidgrow-db-spring-boot-starter/src/main/java/com/kidgrow/db/utils/TableSuffixUtil.java b/kidgrow-commons/kidgrow-db-spring-boot-starter/src/main/java/com/kidgrow/db/utils/TableSuffixUtil.java new file mode 100644 index 0000000..8c29e8a --- /dev/null +++ b/kidgrow-commons/kidgrow-db-spring-boot-starter/src/main/java/com/kidgrow/db/utils/TableSuffixUtil.java @@ -0,0 +1,50 @@ +package com.kidgrow.db.utils; + +import com.kidgrow.common.utils.StringUtils; +import com.kidgrow.db.sharding.TableSuffix; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> + * + * @Description: 获取分表后缀工具类<br> + * @Project: <br> + * @CreateDate: Created in 2020/2/4 16:05 <br> + * @Author: <a href="4345453@kidgrow.com">liuke</a> + */ +@Component +@Slf4j +public class TableSuffixUtil { + + /** + * 环境参数 + */ + private static String envName; + + /** + * 获取参数哈希码的分表后缀 + * @param hashString 参数 + * @return java.lang.String 分表后缀 + */ + public static String getHashTableSuffx(String hashString) { + String tableTag = ""; + if ((! StringUtils.isEmpty(envName)) && (! envName.toLowerCase().equals("pri"))) { + tableTag = TableSuffix.ofHash(hashString, 0, null).getSuffix(); + } + log.info("【{}】环境下【{}】的哈希表后缀为【{}】", envName,hashString, tableTag); + + return tableTag; + } + + /** + * 注解获取环境参数 + * @param activeEnvName 环境参数 + * @return void + */ + @Value("${spring.profiles.active}") + private void setEnvName(String activeEnvName){ + envName = activeEnvName; + } +} -- Gitblit v1.8.0