浏览代码

修复清空日志,刷新页面显示异常

AE86 1 年之前
父节点
当前提交
f1af901266

+ 6 - 2
dbsyncer-storage/src/main/java/org/dbsyncer/storage/AbstractStorageService.java

@@ -68,8 +68,8 @@ public abstract class AbstractStorageService implements StorageService, Disposab
             }
         } catch (InterruptedException e) {
             logger.warn("tryLock error", e.getLocalizedMessage());
-        } catch (IllegalArgumentException e) {
-            logger.warn("查询数据异常,请重试");
+        } catch (NullExecutorException e) {
+            // 存储表不存在或已删除,请重试
         } finally {
             if (locked) {
                 lock.unlock();
@@ -92,6 +92,8 @@ public abstract class AbstractStorageService implements StorageService, Disposab
                 String sharding = getSharding(query.getType(), query.getMetaId());
                 delete(sharding, query);
             }
+        } catch (NullExecutorException e) {
+            // 存储表不存在或已删除,请重试
         } finally {
             if (locked) {
                 lock.unlock();
@@ -105,6 +107,8 @@ public abstract class AbstractStorageService implements StorageService, Disposab
             lock.lock();
             String sharding = getSharding(type, metaId);
             deleteAll(sharding);
+        } catch (NullExecutorException e) {
+            // 存储表不存在或已删除,请重试
         } finally {
             lock.unlock();
         }

+ 15 - 0
dbsyncer-storage/src/main/java/org/dbsyncer/storage/NullExecutorException.java

@@ -0,0 +1,15 @@
+package org.dbsyncer.storage;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2023/10/13 21:38
+ */
+public class NullExecutorException extends RuntimeException {
+
+	private static final long serialVersionUID = 1L;
+
+	public NullExecutorException(String message) {
+        super(message);
+    }
+}

+ 16 - 1
dbsyncer-storage/src/main/java/org/dbsyncer/storage/support/MysqlStorageServiceImpl.java

@@ -16,6 +16,7 @@ import org.dbsyncer.connector.enums.SqlBuilderEnum;
 import org.dbsyncer.connector.model.Field;
 import org.dbsyncer.connector.util.DatabaseUtil;
 import org.dbsyncer.storage.AbstractStorageService;
+import org.dbsyncer.storage.NullExecutorException;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.dbsyncer.storage.enums.StorageEnum;
 import org.dbsyncer.storage.query.AbstractFilter;
@@ -102,6 +103,9 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
     protected Paging select(String sharding, Query query) {
         Paging paging = new Paging(query.getPageNum(), query.getPageSize());
         Executor executor = getExecutor(query.getType(), sharding);
+        if (executor == null) {
+            return paging;
+        }
         List<Object> queryCountArgs = new ArrayList<>();
         String queryCountSql = buildQueryCountSql(query, executor, queryCountArgs);
         Long total = connectorMapper.execute(databaseTemplate -> databaseTemplate.queryForObject(queryCountSql, queryCountArgs.toArray(), Long.class));
@@ -122,6 +126,9 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
     @Override
     protected void delete(String sharding, Query query) {
         Executor executor = getExecutor(query.getType(), sharding);
+        if (executor == null) {
+            return;
+        }
         StringBuilder sql = new StringBuilder("DELETE FROM `").append(executor.getTable()).append("`");
         List<Object> params = new ArrayList<>();
         buildQuerySqlWithParams(query, params, sql, new ArrayList<>());
@@ -172,6 +179,9 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
     @Override
     protected void batchDelete(StorageEnum type, String sharding, List<String> ids) {
         final Executor executor = getExecutor(type, sharding);
+        if (executor == null) {
+            return;
+        }
         final String sql = executor.getDelete();
         final List<Object[]> args = ids.stream().map(id -> new Object[]{id}).collect(Collectors.toList());
         connectorMapper.execute(databaseTemplate -> databaseTemplate.batchUpdate(sql, args));
@@ -188,6 +198,9 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
         }
 
         final Executor executor = getExecutor(type, sharding);
+        if (executor == null) {
+            return;
+        }
         final String sql = mapper.getSql(executor);
         final List<Object[]> args = list.stream().map(row -> mapper.getArgs(executor, row)).collect(Collectors.toList());
         connectorMapper.execute(databaseTemplate -> databaseTemplate.batchUpdate(sql, args));
@@ -196,7 +209,9 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
     private Executor getExecutor(StorageEnum type, String sharding) {
         return tables.computeIfAbsent(sharding, (table) -> {
             Executor executor = tables.get(type.getType());
-            Assert.notNull(executor, "未知的存储类型");
+            if (executor == null) {
+                throw new NullExecutorException("未知的存储类型");
+            }
 
             Executor newExecutor = new Executor(executor.getType(), executor.getFields(), executor.isSystemTable(), executor.isOrderByUpdateTime());
             return createTableIfNotExist(table, newExecutor);