Browse Source

修复获取驱动表时,偶现异常 ConcurrentModificationException:null

AE86 1 year ago
parent
commit
d3bcba17e9

+ 4 - 7
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MappingServiceImpl.java

@@ -1,3 +1,6 @@
+/**
+ * DBSyncer Copyright 2020-2024 All Rights Reserved.
+ */
 package org.dbsyncer.biz.impl;
 
 import org.dbsyncer.biz.BizException;
@@ -22,9 +25,8 @@ import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Meta;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.sdk.connector.ConnectorInstance;
-import org.dbsyncer.sdk.enums.ModelEnum;
-import org.dbsyncer.sdk.model.Table;
 import org.dbsyncer.sdk.constant.ConfigConstant;
+import org.dbsyncer.sdk.enums.ModelEnum;
 import org.dbsyncer.storage.impl.SnowflakeIdWorker;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -32,7 +34,6 @@ import org.springframework.util.Assert;
 
 import javax.annotation.Resource;
 import java.time.Instant;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
@@ -240,10 +241,6 @@ public class MappingServiceImpl extends BaseServiceImpl implements MappingServic
         ConnectorVo tConn = new ConnectorVo(connectorService.isAlive(t.getId()));
         BeanUtils.copyProperties(t, tConn);
 
-        // 按升序展示表
-        Collections.sort(sConn.getTable(), Comparator.comparing(Table::getName));
-        Collections.sort(tConn.getTable(), Comparator.comparing(Table::getName));
-
         // 元信息
         Meta meta = profileComponent.getMeta(mapping.getMetaId());
         Assert.notNull(meta, "Meta can not be null.");

+ 6 - 1
dbsyncer-connector/dbsyncer-connector-base/src/main/java/org/dbsyncer/connector/base/ConnectorFactory.java

@@ -21,6 +21,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
 import javax.annotation.PostConstruct;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -123,7 +125,10 @@ public class ConnectorFactory implements DisposableBean {
      */
     public List<Table> getTable(ConnectorInstance connectorInstance) {
         Assert.notNull(connectorInstance, "ConnectorInstance can not be null.");
-        return getConnectorService(connectorInstance.getConfig()).getTable(connectorInstance);
+        List tableList = getConnectorService(connectorInstance.getConfig()).getTable(connectorInstance);
+        // 按升序展示表
+        Collections.sort(tableList, Comparator.comparing(Table::getName));
+        return tableList;
     }
 
     /**

+ 2 - 2
dbsyncer-parser/src/main/java/org/dbsyncer/parser/impl/OperationTemplate.java

@@ -24,11 +24,11 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * 操作配置模板
@@ -64,7 +64,7 @@ public final class OperationTemplate {
         if (null != group) {
             List<String> index = group.getIndex();
             if (!CollectionUtils.isEmpty(index)) {
-                List<T> list = new CopyOnWriteArrayList<>();
+                List<T> list = new ArrayList<>();
                 Class<? extends ConfigModel> clazz = model.getClass();
                 index.forEach(e -> {
                     Object v = cacheService.get(e);