Browse Source

preload meta

AE86 5 years ago
parent
commit
e2f3ba9e11

+ 2 - 5
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/MetaChecker.java

@@ -42,10 +42,7 @@ public class MetaChecker extends AbstractChecker {
         // 驱动和元信息1对1关系
         List<Meta> metaAll = manager.getMetaAll(mappingId);
         if (!CollectionUtils.isEmpty(metaAll)) {
-            Meta meta = metaAll.get(0);
-            if (MetaEnum.READY.getCode() != meta.getState()) {
-                throw new BizException("驱动正在运行中.");
-            }
+            throw new BizException("驱动正在运行中.");
         }
 
         // TODO 获取驱动数据源总条数
@@ -53,7 +50,7 @@ public class MetaChecker extends AbstractChecker {
         AtomicInteger success = new AtomicInteger();
         AtomicInteger fail = new AtomicInteger();
         Map<String, String> map = new ConcurrentHashMap<>();
-        Meta meta = new Meta(mappingId, MetaEnum.READY.getCode(), total, success, fail, map);
+        Meta meta = new Meta(mappingId, MetaEnum.RUNNING.getCode(), total, success, fail, map);
         meta.setType(ConfigConstant.META);
         meta.setName(ConfigConstant.META);
 

+ 20 - 15
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MappingServiceImpl.java

@@ -10,10 +10,7 @@ import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.enums.MetaEnum;
 import org.dbsyncer.parser.enums.ModelEnum;
-import org.dbsyncer.parser.model.ConfigModel;
-import org.dbsyncer.parser.model.Connector;
-import org.dbsyncer.parser.model.Mapping;
-import org.dbsyncer.parser.model.Meta;
+import org.dbsyncer.parser.model.*;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -62,6 +59,18 @@ public class MappingServiceImpl implements MappingService {
 
     @Override
     public boolean remove(String mappingId) {
+        logger.info("检查驱动是否停止运行");
+        // 删除meta
+        List<Meta> metaList = manager.getMetaAll(mappingId);
+        if (!CollectionUtils.isEmpty(metaList)) {
+            metaList.forEach(m -> manager.removeMeta(m.getId()));
+        }
+
+        // 删除tableGroup
+        List<TableGroup> groupList = manager.getTableGroupAll(mappingId);
+        if (!CollectionUtils.isEmpty(groupList)) {
+            groupList.forEach(t -> manager.removeTableGroup(t.getId()));
+        }
         manager.removeMapping(mappingId);
         return true;
     }
@@ -86,22 +95,18 @@ public class MappingServiceImpl implements MappingService {
     public boolean start(String id) {
         Map<String, String> params = new HashMap<>();
         params.put(ConfigConstant.CONFIG_MODEL_ID, id);
-        synchronized (metaChecker){
-            ConfigModel model = metaChecker.checkAddConfigModel(params);
-            manager.addMeta(model);
-        }
+        ConfigModel model = metaChecker.checkAddConfigModel(params);
+        manager.addMeta(model);
         return true;
     }
 
     @Override
     public boolean stop(String id) {
-        synchronized (metaChecker){
-            List<Meta> metaAll = manager.getMetaAll(id);
-            if(!CollectionUtils.isEmpty(metaAll)){
-                metaAll.forEach(m -> manager.removeMeta(m.getId()));
-            }else{
-                throw new BizException("驱动已停止.");
-            }
+        List<Meta> metaAll = manager.getMetaAll(id);
+        if (!CollectionUtils.isEmpty(metaAll)) {
+            metaAll.forEach(m -> manager.removeMeta(m.getId()));
+        } else {
+            throw new BizException("驱动已停止.");
         }
         return true;
     }

+ 21 - 2
dbsyncer-manager/src/main/java/org/dbsyncer/manager/ManagerFactory.java

@@ -422,7 +422,7 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
 
             @Override
             public ConfigModel parseModel(String json) {
-                return parser.parseMapping(json);
+                return parser.parseObject(json, Mapping.class);
             }
         });
 
@@ -441,7 +441,26 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
 
             @Override
             public ConfigModel parseModel(String json) {
-                return parser.parseTableGroup(json);
+                return parser.parseObject(json, TableGroup.class);
+            }
+        });
+
+        // Load metas
+        preLoadTemplate.execute(new PreLoadTemplate() {
+
+            @Override
+            public GroupStrategy getGroupStrategy() {
+                return metaGroupStrategy;
+            }
+
+            @Override
+            public String filterType() {
+                return ConfigConstant.META;
+            }
+
+            @Override
+            public ConfigModel parseModel(String json) {
+                return parser.parseObject(json, Meta.class);
             }
         });
     }

+ 4 - 11
dbsyncer-parser/src/main/java/org/dbsyncer/parser/Parser.java

@@ -7,7 +7,6 @@ import org.dbsyncer.connector.enums.FilterEnum;
 import org.dbsyncer.connector.enums.OperationEnum;
 import org.dbsyncer.parser.enums.ConvertEnum;
 import org.dbsyncer.parser.model.Connector;
-import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 
 import java.util.List;
@@ -64,20 +63,14 @@ public interface Parser {
     Connector parseConnector(String json);
 
     /**
-     * 解析驱动映射关系配置为Mapping
+     * 解析配置
      *
      * @param json
+     * @param clazz
+     * @param <T>
      * @return
      */
-    Mapping parseMapping(String json);
-
-    /**
-     * 解析表映射关系
-     *
-     * @param json
-     * @return
-     */
-    TableGroup parseTableGroup(String json);
+    <T> T parseObject(String json, Class<T> clazz);
 
     /**
      * 获取所有连接器类型

+ 7 - 22
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ParserFactory.java

@@ -12,10 +12,7 @@ import org.dbsyncer.connector.enums.FilterEnum;
 import org.dbsyncer.connector.enums.OperationEnum;
 import org.dbsyncer.connector.config.CommandConfig;
 import org.dbsyncer.parser.enums.ConvertEnum;
-import org.dbsyncer.parser.model.Connector;
-import org.dbsyncer.parser.model.FieldMapping;
-import org.dbsyncer.parser.model.Mapping;
-import org.dbsyncer.parser.model.TableGroup;
+import org.dbsyncer.parser.model.*;
 import org.dbsyncer.storage.SnowflakeIdWorker;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -108,25 +105,13 @@ public class ParserFactory implements Parser {
     }
 
     @Override
-    public Mapping parseMapping(String json) {
+    public <T> T parseObject(String json, Class<T> clazz) {
         try {
-            JSONObject map = new JSONObject(json);
-            Mapping mapping = JsonUtil.jsonToObj(map.toString(), Mapping.class);
-            Assert.notNull(mapping, "Mapping can not be null.");
-            return mapping;
-        } catch (JSONException e) {
-            logger.error(e.getMessage());
-            throw new ParserException(e.getMessage());
-        }
-    }
-
-    @Override
-    public TableGroup parseTableGroup(String json) {
-        try {
-            JSONObject conn = new JSONObject(json);
-            TableGroup tableGroup = JsonUtil.jsonToObj(conn.toString(), TableGroup.class);
-            Assert.notNull(tableGroup, "TableGroup can not be null.");
-            return tableGroup;
+            JSONObject obj = new JSONObject(json);
+            T t = JsonUtil.jsonToObj(obj.toString(), clazz);
+            String format = String.format("%s can not be null.", clazz.getSimpleName());
+            Assert.notNull(t, format);
+            return t;
         } catch (JSONException e) {
             logger.error(e.getMessage());
             throw new ParserException(e.getMessage());