Browse Source

分表规则优化

tl 7 months ago
parent
commit
9f3a0873fa

+ 10 - 5
cpp-admin/src/main/java/com/cpp/web/core/config/sharding/TimeShardingAlgorithm.java

@@ -113,17 +113,22 @@ public final class TimeShardingAlgorithm implements StandardShardingAlgorithm<Da
         // 循环计算分表范围
         Set<String> resultTableNames = new LinkedHashSet<>();
 
-        //确保小于最小时间表时原始表可被查询
-        String minString = Collections.min(availableTargetNames.stream().filter(a->a.contains(logicTableName+TABLE_SPLIT_SYMBOL)).collect(Collectors.toList()));
-        if (minString.replace(logicTableName+TABLE_SPLIT_SYMBOL,"").compareTo(DateFormatUtils.format(min, PATTERN))<=0){
-            resultTableNames.add(logicTableName);
-        }
 
         while (min < max || min == max) {
             String tableName = logicTableName + TABLE_SPLIT_SYMBOL + DateFormatUtils.format(min, PATTERN);
             resultTableNames.add(tableName);
             min += longMonth;
         }
+
+        List<String> filterAvailableTargetNames = availableTargetNames.stream().filter(a -> a.contains(logicTableName + TABLE_SPLIT_SYMBOL)).collect(Collectors.toList());
+        if (filterAvailableTargetNames.size() > 0) {
+            //确保小于最小时间表时原始表可被查询
+            String minString = Collections.min(filterAvailableTargetNames);
+            if (resultTableNames.contains(minString)) {
+                resultTableNames.add(logicTableName);
+            }
+        }
+
         Set<String> shardingTablesAndCreate = getShardingTablesAndCreate(logicTableName, resultTableNames, availableTargetNames);
 //        log.info(">>>>>>>>>>>>>>>>sharding结束<<<<<<<<<<<<<<<<<<<<");
         return shardingTablesAndCreate;