浏览代码

add log timing config checker

AE86 5 年之前
父节点
当前提交
20beb64891

+ 23 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/AbstractChecker.java

@@ -67,4 +67,27 @@ public abstract class AbstractChecker implements Checker {
 
     }
 
+    /**
+     * 获取检查器类型
+     *
+     * @param type
+     * @return
+     */
+    protected String getCheckerType(String type) {
+        return toLowerCaseFirstOne(type).concat("ConfigChecker");
+    }
+
+    /**
+     * 首字母转小写
+     *
+     * @param s
+     * @return
+     */
+    private String toLowerCaseFirstOne(String s) {
+        if (StringUtils.isBlank(s) || Character.isLowerCase(s.charAt(0))) {
+            return s;
+        }
+        return new StringBuilder().append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString();
+    }
+
 }

+ 23 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/MappingConfigChecker.java

@@ -0,0 +1,23 @@
+package org.dbsyncer.biz.checker;
+
+import org.dbsyncer.parser.model.Mapping;
+
+import java.util.Map;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2020/1/7 23:17
+ */
+public interface MappingConfigChecker {
+
+    /**
+     * 修改配置
+     *
+     * @param mapping
+     * @param params
+     * @return
+     */
+    void modify(Mapping mapping, Map<String, String> params);
+
+}

+ 2 - 18
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/ConnectorChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/ConnectorChecker.java

@@ -1,16 +1,13 @@
 /**
  * Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
  */
-package org.dbsyncer.biz.checker.impl;
+package org.dbsyncer.biz.checker.impl.connector;
 
-import org.apache.commons.lang.StringUtils;
 import org.dbsyncer.biz.checker.AbstractChecker;
 import org.dbsyncer.biz.checker.ConnectorConfigChecker;
 import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.connector.config.ConnectorConfig;
-import org.dbsyncer.connector.config.DatabaseConfig;
 import org.dbsyncer.manager.Manager;
-import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.slf4j.Logger;
@@ -57,7 +54,7 @@ public class ConnectorChecker extends AbstractChecker implements ApplicationCont
 
         // 配置连接器配置
         ConnectorConfig config = connector.getConfig();
-        String type = toLowerCaseFirstOne(config.getConnectorType()) + "ConfigChecker";
+        String type = this.getCheckerType(config.getConnectorType());
         ConnectorConfigChecker checker = map.get(type);
         Assert.notNull(checker, "Checker can not be null.");
         checker.modify(connector, params);
@@ -65,17 +62,4 @@ public class ConnectorChecker extends AbstractChecker implements ApplicationCont
         return JsonUtil.objToJson(connector);
     }
 
-    /**
-     * 首字母转小写
-     *
-     * @param s
-     * @return
-     */
-    private String toLowerCaseFirstOne(String s) {
-        if (StringUtils.isBlank(s) || Character.isLowerCase(s.charAt(0))) {
-            return s;
-        }
-        return new StringBuilder().append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString();
-    }
-
 }

+ 1 - 2
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/connector/MysqlConfigChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/MysqlConfigChecker.java

@@ -1,12 +1,11 @@
 /**
  * Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
  */
-package org.dbsyncer.biz.checker.connector;
+package org.dbsyncer.biz.checker.impl.connector;
 
 import org.dbsyncer.biz.checker.ConnectorConfigChecker;
 import org.dbsyncer.connector.config.DatabaseConfig;
 import org.dbsyncer.parser.model.Connector;
-import org.dbsyncer.storage.constant.ConfigConstant;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 

+ 49 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/LogConfigChecker.java

@@ -0,0 +1,49 @@
+/**
+ * Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
+ */
+package org.dbsyncer.biz.checker.impl.mapping;
+
+import org.apache.commons.lang.StringUtils;
+import org.dbsyncer.biz.checker.MappingConfigChecker;
+import org.dbsyncer.connector.config.ConnectorConfig;
+import org.dbsyncer.connector.enums.ConnectorEnum;
+import org.dbsyncer.manager.Manager;
+import org.dbsyncer.parser.model.Connector;
+import org.dbsyncer.parser.model.Mapping;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 日志配置
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2020/1/8 15:17
+ */
+@Component
+public class LogConfigChecker implements MappingConfigChecker {
+
+    @Autowired
+    private Manager manager;
+
+    @Override
+    public void modify(Mapping mapping, Map<String, String> params) {
+        // String label = params.get("incrementStrategyTableLabel");
+        // TODO 仅支持 DQL_Mysql/DQL_Oracle
+        String connectorId = mapping.getSourceConnectorId();
+        Connector connector = manager.getConnector(connectorId);
+        ConnectorConfig config = connector.getConfig();
+        String type = config.getConnectorType();
+        if(StringUtils.equals(ConnectorEnum.DQL_MYSQL.getType(),type)){
+
+            return;
+        }
+//        if(StringUtils.equals(ConnectorEnum.DQL_ORACLE.getType(),type)){
+//
+//            return;
+//        }
+    }
+
+}

+ 20 - 5
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/MappingChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/MappingChecker.java

@@ -1,21 +1,25 @@
 /**
  * Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
  */
-package org.dbsyncer.biz.checker.impl;
+package org.dbsyncer.biz.checker.impl.mapping;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.math.NumberUtils;
 import org.dbsyncer.biz.checker.AbstractChecker;
+import org.dbsyncer.biz.checker.ConnectorConfigChecker;
+import org.dbsyncer.biz.checker.MappingConfigChecker;
 import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.listener.config.ListenerConfig;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.constant.ModelConstant;
-import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.storage.constant.ConfigConstant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
@@ -27,13 +31,20 @@ import java.util.Map;
  * @date 2020/1/8 15:17
  */
 @Component
-public class MappingChecker extends AbstractChecker {
+public class MappingChecker extends AbstractChecker implements ApplicationContextAware {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
     @Autowired
     private Manager manager;
 
+    private Map<String, MappingConfigChecker> map;
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        map = applicationContext.getBeansOfType(MappingConfigChecker.class);
+    }
+
     @Override
     public String checkConfigModel(Map<String, String> params) {
         logger.info("check mapping params:{}", params);
@@ -58,9 +69,13 @@ public class MappingChecker extends AbstractChecker {
         mapping.setThreadNum(NumberUtils.toInt(threadNum, mapping.getThreadNum()));
         String batchNum = params.get("batchNum");
         mapping.setBatchNum(NumberUtils.toInt(batchNum, mapping.getBatchNum()));
-        // TODO 增量配置(日志/定时)
+        
+        // 增量配置(日志/定时)
         String incrementStrategy = params.get("incrementStrategy");
-        ListenerConfig listener = mapping.getListener();
+        String type = this.getCheckerType(incrementStrategy);
+        MappingConfigChecker checker = map.get(type);
+        Assert.notNull(checker, "Checker can not be null.");
+        checker.modify(mapping, params);
 
         // 修改高级配置:过滤条件/转换配置/插件配置
         this.modifySuperConfigModel(mapping, params);

+ 54 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/TimingConfigChecker.java

@@ -0,0 +1,54 @@
+/**
+ * Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
+ */
+package org.dbsyncer.biz.checker.impl.mapping;
+
+import org.apache.commons.lang.StringUtils;
+import org.dbsyncer.biz.checker.MappingConfigChecker;
+import org.dbsyncer.listener.config.ListenerConfig;
+import org.dbsyncer.listener.config.TimingListenerConfig;
+import org.dbsyncer.parser.model.Mapping;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.Map;
+
+/**
+ * 定时配置
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2020/1/8 15:17
+ */
+@Component
+public class TimingConfigChecker implements MappingConfigChecker {
+
+    @Override
+    public void modify(Mapping mapping, Map<String, String> params) {
+        String cron = params.get("incrementStrategyTimingCronExpression");
+        String eventFieldName = params.get("incrementStrategyTimingEventFieldName");
+        String insert = params.get("incrementStrategyTimingInsert");
+        String update = params.get("incrementStrategyTimingUpdate");
+        String delete = params.get("incrementStrategyTimingDelete");
+
+        TimingListenerConfig config = new TimingListenerConfig();
+        if (StringUtils.isNotBlank(cron)) {
+            config.setCronExpression(cron);
+        }
+        if (StringUtils.isNotBlank(eventFieldName)) {
+            config.setEventFieldName(eventFieldName);
+        }
+        if (StringUtils.isNotBlank(insert)) {
+            config.setInsert(Arrays.asList(insert.split(",")));
+        }
+        if (StringUtils.isNotBlank(update)) {
+            config.setUpdate(Arrays.asList(update.split(",")));
+        }
+        if (StringUtils.isNotBlank(delete)) {
+            config.setDelete(Arrays.asList(delete.split(",")));
+        }
+
+        mapping.setListener(config);
+    }
+
+}

+ 1 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/TableGroupChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java

@@ -1,7 +1,7 @@
 /**
  * Alipay.com Inc. Copyright (c) 2004-2020 All Rights Reserved.
  */
-package org.dbsyncer.biz.checker.impl;
+package org.dbsyncer.biz.checker.impl.tablegroup;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.math.NumberUtils;

+ 1 - 1
dbsyncer-web/src/main/resources/templates/mapping/editMappingIncrementDQL.html

@@ -8,7 +8,7 @@
             <div class="col-md-4">
                 <label class="col-sm-3 control-label text-right">表别名<strong class="driverVerifcateRequired">*</strong></label>
                 <div class="col-sm-9">
-                    <input id="incrementStrategyTableLabel" type="text" dbsyncer-valid="require" class="form-control" value="T1">
+                    <input name="incrementStrategyTableLabel" type="text" dbsyncer-valid="require" class="form-control" value="T1">
                 </div>
             </div>
             <div class="col-md-8"></div>

+ 5 - 5
dbsyncer-web/src/main/resources/templates/mapping/editMappingIncrementQuartz.html

@@ -8,13 +8,13 @@
             <div class="col-md-4">
                 <label class="col-sm-3 control-label text-right">定时*</label>
                 <div class="col-sm-9">
-                    <input id="incrementStrategyQuartzCron" type="text" class="form-control" dbsyncer-valid="require" value="*/30 * * * * ?"/>
+                    <input name="incrementStrategyTimingCronExpression" type="text" class="form-control" dbsyncer-valid="require" value="*/30 * * * * ?"/>
                 </div>
             </div>
             <div class="col-md-4">
                 <label class="col-sm-3 control-label text-right">事件</label>
                 <div class="col-sm-9" title="区分增删改">
-                    <select id="incrementStrategyQuartzEvent" class="form-control select-control">
+                    <select name="incrementStrategyTimingEventFieldName" class="form-control select-control">
                         <option>EVENT_TYPE</option>
                     </select>
                 </div>
@@ -28,19 +28,19 @@
             <div class="col-md-4">
                 <label class="col-sm-3 control-label text-right">Insert*</label>
                 <div class="col-sm-9">
-                    <input id="incrementStrategyQuartzEventInsert" type="text" class="form-control" dbsyncer-valid="require" value="I" />
+                    <input name="incrementStrategyTimingInsert" type="text" class="form-control" dbsyncer-valid="require" value="I" />
                 </div>
             </div>
             <div class="col-md-4">
                 <label class="col-sm-3 control-label text-right">Update*</label>
                 <div class="col-sm-9">
-                    <input id="incrementStrategyQuartzEventUpdate" type="text" class="form-control" dbsyncer-valid="require" value="U" />
+                    <input name="incrementStrategyTimingUpdate" type="text" class="form-control" dbsyncer-valid="require" value="U" />
                 </div>
             </div>
             <div class="col-md-4">
                 <label class="col-sm-3 control-label text-right">Delete*</label>
                 <div class="col-sm-9">
-                    <input id="incrementStrategyQuartzEventDelete" type="text" class="form-control" dbsyncer-valid="require" value="D" />
+                    <input name="incrementStrategyTimingDelete" type="text" class="form-control" dbsyncer-valid="require" value="D" />
                 </div>
             </div>
         </div>