AE86 5 anos atrás
pai
commit
636277e1d9

+ 2 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/Manager.java

@@ -65,6 +65,8 @@ public interface Manager {
     // Meta
     String addMeta(ConfigModel model);
 
+    String editMeta(ConfigModel model);
+
     Meta getMeta(String metaId);
 
     void removeMeta(String metaId);

+ 28 - 16
dbsyncer-manager/src/main/java/org/dbsyncer/manager/ManagerFactory.java

@@ -15,6 +15,7 @@ import org.dbsyncer.manager.template.impl.OperationTemplate;
 import org.dbsyncer.manager.template.impl.PreloadTemplate;
 import org.dbsyncer.parser.Parser;
 import org.dbsyncer.parser.enums.ConvertEnum;
+import org.dbsyncer.parser.enums.MetaEnum;
 import org.dbsyncer.parser.model.*;
 import org.dbsyncer.plugin.PluginFactory;
 import org.dbsyncer.plugin.config.Plugin;
@@ -39,7 +40,7 @@ import java.util.Map;
  * @date 2019/9/16 23:59
  */
 @Component
-public class ManagerFactory implements Manager, ApplicationContextAware, ApplicationListener<ContextRefreshedEvent> {
+public class ManagerFactory implements Manager, ApplicationContextAware {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
@@ -178,6 +179,11 @@ public class ManagerFactory implements Manager, ApplicationContextAware, Applica
         return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_ADD.getHandler()));
     }
 
+    @Override
+    public String editMeta(ConfigModel model) {
+        return operationTemplate.execute(new OperationConfig(model, HandlerEnum.OPR_EDIT.getHandler()));
+    }
+
     @Override
     public Meta getMeta(String metaId) {
         return operationTemplate.queryObject(Meta.class, metaId);
@@ -228,33 +234,33 @@ public class ManagerFactory implements Manager, ApplicationContextAware, Applica
         Connector connector = getConnector(mapping.getSourceConnectorId());
         Assert.notNull(connector, "数据源配置不能为空");
 
+        // 标记运行中
+        String metaId = mapping.getMetaId();
+        changeMetaState(metaId, MetaEnum.RUNNING);
+
         // 启动任务
         Executor executor = getExecutor(mapping);
-        boolean start = executor.start(mapping.getMetaId(), mapping.getListener(), connector.getConfig());
+        boolean start = executor.start(metaId, mapping.getListener(), connector.getConfig());
+
+        // rollback
+        if(!start){
+            logger.warn("启动失败:{}", metaId);
+            changeMetaState(metaId, MetaEnum.READY);
+        }
         return start;
     }
 
     @Override
     public boolean close(Mapping mapping) {
+        String metaId = mapping.getMetaId();
+        changeMetaState(metaId, MetaEnum.STOPPING);
+
         // 关闭任务
         Executor executor = getExecutor(mapping);
-        boolean shutdown = executor.shutdown(mapping.getMetaId());
+        boolean shutdown = executor.shutdown(metaId);
         return shutdown;
     }
 
-    @Override
-    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
-        // Load connectors
-        preloadTemplate.execute(new PreloadConfig(ConfigConstant.CONNECTOR, HandlerEnum.PRELOAD_CONNECTOR.getHandler()));
-        // Load mappings
-        preloadTemplate.execute(new PreloadConfig(ConfigConstant.MAPPING, HandlerEnum.PRELOAD_MAPPING.getHandler()));
-        // Load tableGroups
-        preloadTemplate.execute(new PreloadConfig(ConfigConstant.TABLE_GROUP, GroupStrategyEnum.TABLE, HandlerEnum.PRELOAD_TABLE_GROUP.getHandler()));
-        // Load metas
-        preloadTemplate.execute(new PreloadConfig(ConfigConstant.META, HandlerEnum.PRELOAD_META.getHandler()));
-
-    }
-
     private Executor getExecutor(Mapping mapping) {
         Assert.notNull(mapping, "驱动不能为空");
         String model = mapping.getModel();
@@ -267,4 +273,10 @@ public class ManagerFactory implements Manager, ApplicationContextAware, Applica
         return executor;
     }
 
+    private void changeMetaState(String metaId, MetaEnum metaEnum){
+        Meta meta = getMeta(metaId);
+        meta.setState(metaEnum.getCode());
+        editMeta(meta);
+    }
+
 }

+ 17 - 1
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/PreloadTemplate.java

@@ -4,6 +4,7 @@ import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.manager.config.PreloadCallBack;
 import org.dbsyncer.manager.config.PreloadConfig;
 import org.dbsyncer.manager.enums.GroupStrategyEnum;
+import org.dbsyncer.manager.enums.HandlerEnum;
 import org.dbsyncer.manager.template.AbstractTemplate;
 import org.dbsyncer.manager.template.Handler;
 import org.dbsyncer.parser.Parser;
@@ -14,6 +15,8 @@ import org.dbsyncer.storage.query.Query;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.event.ContextRefreshedEvent;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -27,7 +30,7 @@ import java.util.Map;
  * @date 2019/9/16 23:59
  */
 @Component
-public final class PreloadTemplate extends AbstractTemplate {
+public final class PreloadTemplate extends AbstractTemplate implements ApplicationListener<ContextRefreshedEvent> {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
@@ -60,4 +63,17 @@ public final class PreloadTemplate extends AbstractTemplate {
         }
     }
 
+    @Override
+    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
+        // Load connectors
+        execute(new PreloadConfig(ConfigConstant.CONNECTOR, HandlerEnum.PRELOAD_CONNECTOR.getHandler()));
+        // Load mappings
+        execute(new PreloadConfig(ConfigConstant.MAPPING, HandlerEnum.PRELOAD_MAPPING.getHandler()));
+        // Load tableGroups
+        execute(new PreloadConfig(ConfigConstant.TABLE_GROUP, GroupStrategyEnum.TABLE, HandlerEnum.PRELOAD_TABLE_GROUP.getHandler()));
+        // Load metas
+        execute(new PreloadConfig(ConfigConstant.META, HandlerEnum.PRELOAD_META.getHandler()));
+
+    }
+
 }