Browse Source

支持导入配置文件

AE86 3 years ago
parent
commit
e781cceb9b

+ 1 - 14
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/ConfigServiceImpl.java

@@ -5,7 +5,6 @@ import org.dbsyncer.biz.ConfigService;
 import org.dbsyncer.biz.checker.impl.config.ConfigChecker;
 import org.dbsyncer.biz.checker.impl.config.ConfigChecker;
 import org.dbsyncer.biz.vo.ConfigVo;
 import org.dbsyncer.biz.vo.ConfigVo;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.CollectionUtils;
-import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.template.impl.PreloadTemplate;
 import org.dbsyncer.manager.template.impl.PreloadTemplate;
 import org.dbsyncer.parser.logger.LogService;
 import org.dbsyncer.parser.logger.LogService;
@@ -14,8 +13,6 @@ import org.dbsyncer.parser.model.Config;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.plugin.enums.FileSuffixEnum;
 import org.dbsyncer.plugin.enums.FileSuffixEnum;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.dbsyncer.storage.constant.ConfigConstant;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -38,8 +35,6 @@ import java.util.stream.Collectors;
 @Service
 @Service
 public class ConfigServiceImpl implements ConfigService {
 public class ConfigServiceImpl implements ConfigService {
 
 
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-
     @Autowired
     @Autowired
     private Manager manager;
     private Manager manager;
 
 
@@ -109,20 +104,12 @@ public class ConfigServiceImpl implements ConfigService {
     @Override
     @Override
     public void refreshConfig(File file) {
     public void refreshConfig(File file) {
         Assert.notNull(file, "the config file is null.");
         Assert.notNull(file, "the config file is null.");
-
         try {
         try {
             List<String> lines = FileUtils.readLines(file, Charset.defaultCharset());
             List<String> lines = FileUtils.readLines(file, Charset.defaultCharset());
             if (!CollectionUtils.isEmpty(lines)) {
             if (!CollectionUtils.isEmpty(lines)) {
                 StringBuilder json = new StringBuilder();
                 StringBuilder json = new StringBuilder();
                 lines.forEach(line -> json.append(line));
                 lines.forEach(line -> json.append(line));
-
-                Map<String, Object> map = JsonUtil.jsonToObj(json.toString(), Map.class);
-                if (!CollectionUtils.isEmpty(map)) {
-                    map.forEach((k, v) -> {
-                        // TODO 持久化配置
-                        logger.info("key:{} ,value:{}", k, v);
-                    });
-                }
+                preloadTemplate.reload(json.toString());
             }
             }
         } catch (IOException e) {
         } catch (IOException e) {
             logService.log(LogType.CacheLog.IMPORT_ERROR);
             logService.log(LogType.CacheLog.IMPORT_ERROR);

+ 10 - 10
dbsyncer-manager/src/main/java/org/dbsyncer/manager/ManagerFactory.java

@@ -93,12 +93,12 @@ public class ManagerFactory implements Manager, ApplicationListener<ClosedEvent>
 
 
     @Override
     @Override
     public String addConnector(ConfigModel model) {
     public String addConnector(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD));
     }
     }
 
 
     @Override
     @Override
     public String editConnector(ConfigModel model) {
     public String editConnector(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT));
     }
     }
 
 
     @Override
     @Override
@@ -137,12 +137,12 @@ public class ManagerFactory implements Manager, ApplicationListener<ClosedEvent>
 
 
     @Override
     @Override
     public String addMapping(ConfigModel model) {
     public String addMapping(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD));
     }
     }
 
 
     @Override
     @Override
     public String editMapping(ConfigModel model) {
     public String editMapping(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT));
     }
     }
 
 
     @Override
     @Override
@@ -166,12 +166,12 @@ public class ManagerFactory implements Manager, ApplicationListener<ClosedEvent>
 
 
     @Override
     @Override
     public String addTableGroup(ConfigModel model) {
     public String addTableGroup(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, GroupStrategyEnum.TABLE, HandlerEnum.OPR_ADD.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD, GroupStrategyEnum.TABLE));
     }
     }
 
 
     @Override
     @Override
     public String editTableGroup(ConfigModel model) {
     public String editTableGroup(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, GroupStrategyEnum.TABLE, HandlerEnum.OPR_EDIT.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT, GroupStrategyEnum.TABLE));
     }
     }
 
 
     @Override
     @Override
@@ -206,12 +206,12 @@ public class ManagerFactory implements Manager, ApplicationListener<ClosedEvent>
 
 
     @Override
     @Override
     public String addMeta(ConfigModel model) {
     public String addMeta(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD));
     }
     }
 
 
     @Override
     @Override
     public String editMeta(ConfigModel model) {
     public String editMeta(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT));
     }
     }
 
 
     @Override
     @Override
@@ -234,12 +234,12 @@ public class ManagerFactory implements Manager, ApplicationListener<ClosedEvent>
 
 
     @Override
     @Override
     public String addConfig(ConfigModel model) {
     public String addConfig(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD));
     }
     }
 
 
     @Override
     @Override
     public String editConfig(ConfigModel model) {
     public String editConfig(ConfigModel model) {
-        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT.getHandler()));
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT));
     }
     }
 
 
     @Override
     @Override

+ 8 - 7
dbsyncer-manager/src/main/java/org/dbsyncer/manager/config/OperationConfig.java

@@ -1,6 +1,7 @@
 package org.dbsyncer.manager.config;
 package org.dbsyncer.manager.config;
 
 
 import org.dbsyncer.manager.enums.GroupStrategyEnum;
 import org.dbsyncer.manager.enums.GroupStrategyEnum;
+import org.dbsyncer.manager.enums.HandlerEnum;
 import org.dbsyncer.manager.template.Handler;
 import org.dbsyncer.manager.template.Handler;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
 
 
@@ -10,9 +11,9 @@ public class OperationConfig {
 
 
     private ConfigModel model;
     private ConfigModel model;
 
 
-    private GroupStrategyEnum groupStrategyEnum;
+    private GroupStrategyEnum groupStrategyEnum = GroupStrategyEnum.DEFAULT;
 
 
-    private Handler handler;
+    private HandlerEnum handlerEnum;
 
 
     public OperationConfig(String id) {
     public OperationConfig(String id) {
         this.id = id;
         this.id = id;
@@ -23,15 +24,15 @@ public class OperationConfig {
         this.groupStrategyEnum = groupStrategyEnum;
         this.groupStrategyEnum = groupStrategyEnum;
     }
     }
 
 
-    public OperationConfig(ConfigModel model, Handler handler) {
+    public OperationConfig(ConfigModel model, HandlerEnum handlerEnum) {
         this.model = model;
         this.model = model;
-        this.handler = handler;
+        this.handlerEnum = handlerEnum;
     }
     }
 
 
-    public OperationConfig(ConfigModel model, GroupStrategyEnum groupStrategyEnum, Handler handler) {
+    public OperationConfig(ConfigModel model, HandlerEnum handlerEnum, GroupStrategyEnum groupStrategyEnum) {
         this.model = model;
         this.model = model;
+        this.handlerEnum = handlerEnum;
         this.groupStrategyEnum = groupStrategyEnum;
         this.groupStrategyEnum = groupStrategyEnum;
-        this.handler = handler;
     }
     }
 
 
     public String getId() {
     public String getId() {
@@ -47,6 +48,6 @@ public class OperationConfig {
     }
     }
 
 
     public Handler getHandler() {
     public Handler getHandler() {
-        return handler;
+        return handlerEnum.getHandler();
     }
     }
 }
 }

+ 1 - 31
dbsyncer-manager/src/main/java/org/dbsyncer/manager/config/PreloadConfig.java

@@ -1,36 +1,6 @@
 package org.dbsyncer.manager.config;
 package org.dbsyncer.manager.config;
 
 
-import org.dbsyncer.manager.enums.GroupStrategyEnum;
-import org.dbsyncer.manager.enums.HandlerEnum;
-
+@Deprecated
 public class PreloadConfig {
 public class PreloadConfig {
 
 
-    private String configModelType;
-
-    private GroupStrategyEnum groupStrategyEnum;
-
-    private HandlerEnum handlerEnum;
-
-    public PreloadConfig(String configModelType, HandlerEnum handlerEnum) {
-        this.configModelType = configModelType;
-        this.handlerEnum = handlerEnum;
-    }
-
-    public PreloadConfig(String configModelType, GroupStrategyEnum groupStrategyEnum, HandlerEnum handlerEnum) {
-        this.configModelType = configModelType;
-        this.groupStrategyEnum = groupStrategyEnum;
-        this.handlerEnum = handlerEnum;
-    }
-
-    public String getConfigModelType() {
-        return configModelType;
-    }
-
-    public GroupStrategyEnum getGroupStrategyEnum() {
-        return groupStrategyEnum;
-    }
-
-    public HandlerEnum getHandlerEnum() {
-        return handlerEnum;
-    }
 }
 }

+ 1 - 1
dbsyncer-manager/src/main/java/org/dbsyncer/manager/config/QueryConfig.java

@@ -7,7 +7,7 @@ public class QueryConfig<T> {
 
 
     private ConfigModel configModel;
     private ConfigModel configModel;
 
 
-    private GroupStrategyEnum groupStrategyEnum;
+    private GroupStrategyEnum groupStrategyEnum = GroupStrategyEnum.DEFAULT;
 
 
     public QueryConfig(ConfigModel configModel) {
     public QueryConfig(ConfigModel configModel) {
         this.configModel = configModel;
         this.configModel = configModel;

+ 43 - 10
dbsyncer-manager/src/main/java/org/dbsyncer/manager/enums/HandlerEnum.java

@@ -5,6 +5,7 @@ import org.dbsyncer.manager.config.PreloadCallBack;
 import org.dbsyncer.manager.handler.AbstractOperationHandler;
 import org.dbsyncer.manager.handler.AbstractOperationHandler;
 import org.dbsyncer.manager.handler.AbstractPreloadHandler;
 import org.dbsyncer.manager.handler.AbstractPreloadHandler;
 import org.dbsyncer.manager.template.Handler;
 import org.dbsyncer.manager.template.Handler;
+import org.dbsyncer.storage.constant.ConfigConstant;
 
 
 /**
 /**
  * @author AE86
  * @author AE86
@@ -16,74 +17,106 @@ public enum HandlerEnum {
     /**
     /**
      * 添加
      * 添加
      */
      */
-    OPR_ADD(new AbstractOperationHandler(){
+    OPR_ADD("add", new AbstractOperationHandler() {
         @Override
         @Override
         protected void handle(OperationCallBack operationCallBack) {
         protected void handle(OperationCallBack operationCallBack) {
             operationCallBack.add();
             operationCallBack.add();
         }
         }
     }),
     }),
+
     /**
     /**
      * 修改
      * 修改
      */
      */
-    OPR_EDIT(new AbstractOperationHandler(){
+    OPR_EDIT("edit", new AbstractOperationHandler() {
         @Override
         @Override
         protected void handle(OperationCallBack operationCallBack) {
         protected void handle(OperationCallBack operationCallBack) {
             operationCallBack.edit();
             operationCallBack.edit();
         }
         }
     }),
     }),
+
     /**
     /**
      * 预加载Connector
      * 预加载Connector
      */
      */
-    PRELOAD_CONNECTOR(new AbstractPreloadHandler(){
+    PRELOAD_CONNECTOR(ConfigConstant.CONNECTOR, true, new AbstractPreloadHandler() {
         @Override
         @Override
         protected Object preload(PreloadCallBack preloadCallBack) {
         protected Object preload(PreloadCallBack preloadCallBack) {
             return preloadCallBack.parseConnector();
             return preloadCallBack.parseConnector();
         }
         }
     }),
     }),
+
     /**
     /**
      * 预加载Mapping
      * 预加载Mapping
      */
      */
-    PRELOAD_MAPPING(new AbstractPreloadHandler(){
+    PRELOAD_MAPPING(ConfigConstant.MAPPING, true, new AbstractPreloadHandler() {
         @Override
         @Override
         protected Object preload(PreloadCallBack preloadCallBack) {
         protected Object preload(PreloadCallBack preloadCallBack) {
             return preloadCallBack.parseMapping();
             return preloadCallBack.parseMapping();
         }
         }
     }),
     }),
+
     /**
     /**
      * 预加载TableGroup
      * 预加载TableGroup
      */
      */
-    PRELOAD_TABLE_GROUP(new AbstractPreloadHandler(){
+    PRELOAD_TABLE_GROUP(ConfigConstant.TABLE_GROUP, true, new AbstractPreloadHandler() {
         @Override
         @Override
         protected Object preload(PreloadCallBack preloadCallBack) {
         protected Object preload(PreloadCallBack preloadCallBack) {
             return preloadCallBack.parseTableGroup();
             return preloadCallBack.parseTableGroup();
         }
         }
-    }),
+    }, GroupStrategyEnum.TABLE),
+
     /**
     /**
      * 预加载Meta
      * 预加载Meta
      */
      */
-    PRELOAD_META(new AbstractPreloadHandler(){
+    PRELOAD_META(ConfigConstant.META, true, new AbstractPreloadHandler() {
         @Override
         @Override
         protected Object preload(PreloadCallBack preloadCallBack) {
         protected Object preload(PreloadCallBack preloadCallBack) {
             return preloadCallBack.parseMeta();
             return preloadCallBack.parseMeta();
         }
         }
     }),
     }),
+
     /**
     /**
      * 预加载Config
      * 预加载Config
      */
      */
-    PRELOAD_CONFIG(new AbstractPreloadHandler(){
+    PRELOAD_CONFIG(ConfigConstant.CONFIG, true, new AbstractPreloadHandler() {
         @Override
         @Override
         protected Object preload(PreloadCallBack preloadCallBack) {
         protected Object preload(PreloadCallBack preloadCallBack) {
             return preloadCallBack.parseConfig();
             return preloadCallBack.parseConfig();
         }
         }
     });
     });
 
 
+    private String modelType;
+    private boolean preload;
     private Handler handler;
     private Handler handler;
+    private GroupStrategyEnum groupStrategyEnum;
+
+    HandlerEnum(String modelType, Handler handler) {
+        this(modelType, false, handler, null);
+    }
 
 
-    HandlerEnum(Handler handler) {
+    HandlerEnum(String modelType, boolean preload, Handler handler) {
+        this(modelType, preload, handler, GroupStrategyEnum.DEFAULT);
+    }
+
+    HandlerEnum(String modelType, boolean preload, Handler handler, GroupStrategyEnum groupStrategyEnum) {
+        this.modelType = modelType;
+        this.preload = preload;
         this.handler = handler;
         this.handler = handler;
+        this.groupStrategyEnum = groupStrategyEnum;
+    }
+
+    public String getModelType() {
+        return modelType;
+    }
+
+    public boolean isPreload() {
+        return preload;
     }
     }
 
 
     public Handler getHandler() {
     public Handler getHandler() {
         return handler;
         return handler;
     }
     }
-}
+
+    public GroupStrategyEnum getGroupStrategyEnum() {
+        return groupStrategyEnum;
+    }
+}

+ 6 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/strategy/TableGroupStrategy.java

@@ -3,7 +3,9 @@ package org.dbsyncer.manager.strategy;
 import org.dbsyncer.manager.ManagerException;
 import org.dbsyncer.manager.ManagerException;
 import org.dbsyncer.manager.template.GroupStrategy;
 import org.dbsyncer.manager.template.GroupStrategy;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
+import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.parser.model.TableGroup;
+import org.dbsyncer.storage.constant.ConfigConstant;
 
 
 /**
 /**
  * @author AE86
  * @author AE86
@@ -21,6 +23,10 @@ public class TableGroupStrategy implements GroupStrategy {
             // 格式:${type} + "_" + ${mappingId}
             // 格式:${type} + "_" + ${mappingId}
             return new StringBuilder(type).append("_").append(mappingId).toString();
             return new StringBuilder(type).append("_").append(mappingId).toString();
         }
         }
+        if (model instanceof Mapping) {
+            Mapping m = (Mapping) model;
+            return new StringBuilder(ConfigConstant.TABLE_GROUP).append("_").append(m.getId()).toString();
+        }
         throw new ManagerException(String.format("Not support config model \"%s\".", model));
         throw new ManagerException(String.format("Not support config model \"%s\".", model));
     }
     }
 
 

+ 1 - 21
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/AbstractTemplate.java

@@ -1,26 +1,6 @@
 package org.dbsyncer.manager.template;
 package org.dbsyncer.manager.template;
 
 
-import org.dbsyncer.manager.config.OperationConfig;
-import org.dbsyncer.manager.config.PreloadConfig;
-import org.dbsyncer.manager.config.QueryConfig;
-import org.dbsyncer.manager.enums.GroupStrategyEnum;
-
+@Deprecated
 public abstract class AbstractTemplate {
 public abstract class AbstractTemplate {
 
 
-    protected GroupStrategyEnum getDefaultStrategy(PreloadConfig config){
-        return getDefaultStrategy(config.getGroupStrategyEnum());
-    }
-
-    protected GroupStrategyEnum getDefaultStrategy(OperationConfig config){
-        return getDefaultStrategy(config.getGroupStrategyEnum());
-    }
-
-    protected GroupStrategyEnum getDefaultStrategy(QueryConfig query){
-        return getDefaultStrategy(query.getGroupStrategyEnum());
-    }
-
-    private GroupStrategyEnum getDefaultStrategy(GroupStrategyEnum strategy){
-        return null != strategy ? strategy : GroupStrategyEnum.DEFAULT;
-    }
-
 }
 }

+ 16 - 11
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/OperationTemplate.java

@@ -8,7 +8,6 @@ import org.dbsyncer.manager.config.OperationCallBack;
 import org.dbsyncer.manager.config.OperationConfig;
 import org.dbsyncer.manager.config.OperationConfig;
 import org.dbsyncer.manager.config.QueryConfig;
 import org.dbsyncer.manager.config.QueryConfig;
 import org.dbsyncer.manager.enums.GroupStrategyEnum;
 import org.dbsyncer.manager.enums.GroupStrategyEnum;
-import org.dbsyncer.manager.template.AbstractTemplate;
 import org.dbsyncer.manager.template.GroupStrategy;
 import org.dbsyncer.manager.template.GroupStrategy;
 import org.dbsyncer.manager.template.Handler;
 import org.dbsyncer.manager.template.Handler;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
@@ -22,7 +21,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 import org.springframework.util.Assert;
 
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * 操作配置模板
  * 操作配置模板
@@ -32,7 +35,7 @@ import java.util.*;
  * @date 2019/9/16 23:59
  * @date 2019/9/16 23:59
  */
  */
 @Component
 @Component
-public final class OperationTemplate extends AbstractTemplate {
+public final class OperationTemplate {
 
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
 
@@ -44,10 +47,10 @@ public final class OperationTemplate extends AbstractTemplate {
 
 
     public <T> List<T> queryAll(QueryConfig<T> query) {
     public <T> List<T> queryAll(QueryConfig<T> query) {
         ConfigModel model = query.getConfigModel();
         ConfigModel model = query.getConfigModel();
-        String groupId = getGroupId(model, getDefaultStrategy(query));
+        String groupId = getGroupId(model, query.getGroupStrategyEnum());
         Group group = cacheService.get(groupId, Group.class);
         Group group = cacheService.get(groupId, Group.class);
         if (null != group) {
         if (null != group) {
-            List<String> index = group.getAll();
+            List<String> index = group.getIndex();
             if (!CollectionUtils.isEmpty(index)) {
             if (!CollectionUtils.isEmpty(index)) {
                 List<T> list = new ArrayList<>();
                 List<T> list = new ArrayList<>();
                 Class<? extends ConfigModel> clazz = model.getClass();
                 Class<? extends ConfigModel> clazz = model.getClass();
@@ -84,8 +87,7 @@ public final class OperationTemplate extends AbstractTemplate {
         handler.execute(new OperationCallBack(storageService, StorageEnum.CONFIG, params));
         handler.execute(new OperationCallBack(storageService, StorageEnum.CONFIG, params));
 
 
         // 3、缓存
         // 3、缓存
-        GroupStrategyEnum strategy = getDefaultStrategy(config);
-        cache(model, strategy);
+        cache(model, config.getGroupStrategyEnum());
         return model.getId();
         return model.getId();
     }
     }
 
 
@@ -108,7 +110,7 @@ public final class OperationTemplate extends AbstractTemplate {
         Assert.hasText(id, "ID can not be empty.");
         Assert.hasText(id, "ID can not be empty.");
         // 删除分组
         // 删除分组
         ConfigModel model = cacheService.get(id, ConfigModel.class);
         ConfigModel model = cacheService.get(id, ConfigModel.class);
-        String groupId = getGroupId(model, getDefaultStrategy(config));
+        String groupId = getGroupId(model, config.getGroupStrategyEnum());
         Group group = cacheService.get(groupId, Group.class);
         Group group = cacheService.get(groupId, Group.class);
         if (null != group) {
         if (null != group) {
             group.remove(id);
             group.remove(id);
@@ -120,7 +122,7 @@ public final class OperationTemplate extends AbstractTemplate {
         storageService.remove(StorageEnum.CONFIG, id);
         storageService.remove(StorageEnum.CONFIG, id);
     }
     }
 
 
-    private String getGroupId(ConfigModel model, GroupStrategyEnum strategy) {
+    public String getGroupId(ConfigModel model, GroupStrategyEnum strategy) {
         Assert.notNull(model, "ConfigModel can not be null.");
         Assert.notNull(model, "ConfigModel can not be null.");
         Assert.notNull(strategy, "GroupStrategyEnum can not be null.");
         Assert.notNull(strategy, "GroupStrategyEnum can not be null.");
         GroupStrategy groupStrategy = strategy.getGroupStrategy();
         GroupStrategy groupStrategy = strategy.getGroupStrategy();
@@ -146,7 +148,7 @@ public final class OperationTemplate extends AbstractTemplate {
         }
         }
     }
     }
 
 
-    class Group {
+    static class Group {
 
 
         private List<String> index;
         private List<String> index;
 
 
@@ -168,10 +170,13 @@ public final class OperationTemplate extends AbstractTemplate {
             return index.size();
             return index.size();
         }
         }
 
 
-        public List<String> getAll() {
+        public List<String> getIndex() {
             return Collections.unmodifiableList(index);
             return Collections.unmodifiableList(index);
         }
         }
 
 
+        public void setIndex(List<String> index) {
+            this.index = index;
+        }
     }
     }
 
 
 }
 }

+ 58 - 20
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/PreloadTemplate.java

@@ -1,15 +1,16 @@
 package org.dbsyncer.manager.template.impl;
 package org.dbsyncer.manager.template.impl;
 
 
+import com.alibaba.fastjson.JSONObject;
 import org.dbsyncer.common.model.Paging;
 import org.dbsyncer.common.model.Paging;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.CollectionUtils;
+import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.Manager;
+import org.dbsyncer.manager.config.OperationConfig;
 import org.dbsyncer.manager.config.PreloadCallBack;
 import org.dbsyncer.manager.config.PreloadCallBack;
-import org.dbsyncer.manager.config.PreloadConfig;
 import org.dbsyncer.manager.config.QueryConfig;
 import org.dbsyncer.manager.config.QueryConfig;
-import org.dbsyncer.manager.enums.GroupStrategyEnum;
 import org.dbsyncer.manager.enums.HandlerEnum;
 import org.dbsyncer.manager.enums.HandlerEnum;
-import org.dbsyncer.manager.template.AbstractTemplate;
 import org.dbsyncer.manager.template.Handler;
 import org.dbsyncer.manager.template.Handler;
+import org.dbsyncer.manager.template.impl.OperationTemplate.Group;
 import org.dbsyncer.parser.Parser;
 import org.dbsyncer.parser.Parser;
 import org.dbsyncer.parser.enums.MetaEnum;
 import org.dbsyncer.parser.enums.MetaEnum;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
@@ -26,6 +27,7 @@ import org.springframework.context.ApplicationListener;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
@@ -37,7 +39,7 @@ import java.util.Map;
  * @date 2019/9/16 23:59
  * @date 2019/9/16 23:59
  */
  */
 @Component
 @Component
-public final class PreloadTemplate extends AbstractTemplate implements ApplicationListener<ContextRefreshedEvent> {
+public final class PreloadTemplate implements ApplicationListener<ContextRefreshedEvent> {
 
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
 
@@ -53,10 +55,10 @@ public final class PreloadTemplate extends AbstractTemplate implements Applicati
     @Autowired
     @Autowired
     private OperationTemplate operationTemplate;
     private OperationTemplate operationTemplate;
 
 
-    public void execute(PreloadConfig config) {
+    public void execute(HandlerEnum handlerEnum) {
         Query query = new Query();
         Query query = new Query();
         query.setType(StorageEnum.CONFIG);
         query.setType(StorageEnum.CONFIG);
-        String modelType = config.getConfigModelType();
+        String modelType = handlerEnum.getModelType();
         query.addFilter(ConfigConstant.CONFIG_MODEL_TYPE, modelType);
         query.addFilter(ConfigConstant.CONFIG_MODEL_TYPE, modelType);
 
 
         int pageNum = 1;
         int pageNum = 1;
@@ -70,34 +72,70 @@ public final class PreloadTemplate extends AbstractTemplate implements Applicati
             if (CollectionUtils.isEmpty(data)) {
             if (CollectionUtils.isEmpty(data)) {
                 break;
                 break;
             }
             }
-            Handler handler = config.getHandlerEnum().getHandler();
-            GroupStrategyEnum strategy = getDefaultStrategy(config);
+            Handler handler = handlerEnum.getHandler();
             data.forEach(map -> {
             data.forEach(map -> {
                 String json = (String) map.get(ConfigConstant.CONFIG_MODEL_JSON);
                 String json = (String) map.get(ConfigConstant.CONFIG_MODEL_JSON);
                 ConfigModel model = (ConfigModel) handler.execute(new PreloadCallBack(parser, json));
                 ConfigModel model = (ConfigModel) handler.execute(new PreloadCallBack(parser, json));
                 if (null != model) {
                 if (null != model) {
-                    operationTemplate.cache(model, strategy);
+                    operationTemplate.cache(model, handlerEnum.getGroupStrategyEnum());
                 }
                 }
             });
             });
             total += paging.getTotal();
             total += paging.getTotal();
-            pageNum ++;
+            pageNum++;
         }
         }
 
 
         logger.info("PreLoad {}:{}", modelType, total);
         logger.info("PreLoad {}:{}", modelType, total);
     }
     }
 
 
-    @Override
-    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
+    public void reload(String json) {
+        Map<String, JSONObject> map = JsonUtil.jsonToObj(json, Map.class);
+        if (CollectionUtils.isEmpty(map)) {
+            return;
+        }
+
+        // Load configs
+        reload(map, HandlerEnum.PRELOAD_CONFIG);
         // Load connectors
         // Load connectors
-        execute(new PreloadConfig(ConfigConstant.CONNECTOR, HandlerEnum.PRELOAD_CONNECTOR));
-        // Load mappings
-        execute(new PreloadConfig(ConfigConstant.MAPPING, HandlerEnum.PRELOAD_MAPPING));
-        // Load tableGroups
-        execute(new PreloadConfig(ConfigConstant.TABLE_GROUP, GroupStrategyEnum.TABLE, HandlerEnum.PRELOAD_TABLE_GROUP));
+        reload(map, HandlerEnum.PRELOAD_CONNECTOR);
         // Load metas
         // Load metas
-        execute(new PreloadConfig(ConfigConstant.META, HandlerEnum.PRELOAD_META));
-        // Load configs
-        execute(new PreloadConfig(ConfigConstant.CONFIG, HandlerEnum.PRELOAD_CONFIG));
+        reload(map, HandlerEnum.PRELOAD_META);
+        // Load mappings
+        reload(map, HandlerEnum.PRELOAD_MAPPING);
+    }
+
+    private void reload(Map<String, JSONObject> map, HandlerEnum handlerEnum) {
+        reload(map, handlerEnum, handlerEnum.getModelType());
+    }
+
+    private void reload(Map<String, JSONObject> map, HandlerEnum handlerEnum, String groupId) {
+        JSONObject config = map.get(groupId);
+        Group group = JsonUtil.jsonToObj(config.toJSONString(), Group.class);
+        if (null == group) {
+            return;
+        }
+
+        List<String> index = group.getIndex();
+        if (CollectionUtils.isEmpty(index)) {
+            return;
+        }
+
+        Handler handler = handlerEnum.getHandler();
+        for (String e : index) {
+            JSONObject m = map.get(e);
+            ConfigModel model = (ConfigModel) handler.execute(new PreloadCallBack(parser, m.toJSONString()));
+            operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD, handlerEnum.getGroupStrategyEnum()));
+            // Load tableGroups
+            if (HandlerEnum.PRELOAD_MAPPING == handlerEnum) {
+                handlerEnum = HandlerEnum.PRELOAD_TABLE_GROUP;
+                reload(map, handlerEnum, operationTemplate.getGroupId(model, handlerEnum.getGroupStrategyEnum()));
+            }
+        }
+    }
+
+    @Override
+    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
+        // Load configModels
+        Arrays.stream(HandlerEnum.values()).filter(handlerEnum -> handlerEnum.isPreload()).forEach(handlerEnum -> execute(handlerEnum));
 
 
         // Load plugins
         // Load plugins
         manager.loadPlugins();
         manager.loadPlugins();