1
0
Эх сурвалжийг харах

修改不存在时,执行插入命令

AE86 4 жил өмнө
parent
commit
0d8fe61391

+ 16 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/config/WriterSingleConfig.java

@@ -15,8 +15,16 @@ public class WriterSingleConfig extends WriterConfig {
      */
     private String event;
 
+    /**
+     * 表名
+     */
     private String table;
 
+    /**
+     * 更新失败转insert
+     */
+    private boolean retry;
+
     public WriterSingleConfig(ConnectorConfig config, List<Field> fields, Map<String, String> command, String event, Map<String, Object> data, String table) {
         setConfig(config);
         setCommand(command);
@@ -52,4 +60,12 @@ public class WriterSingleConfig extends WriterConfig {
         this.table = table;
         return this;
     }
+
+    public boolean isRetry() {
+        return retry;
+    }
+
+    public void setRetry(boolean retry) {
+        this.retry = retry;
+    }
 }

+ 11 - 5
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/AbstractDatabaseConnector.java

@@ -258,21 +258,19 @@ public abstract class AbstractDatabaseConnector implements Database {
         DatabaseConfig cfg = (DatabaseConfig) config.getConfig();
         JdbcTemplate jdbcTemplate = null;
         Result result = new Result();
+        int update = 0;
         try {
             // 2、获取连接
             jdbcTemplate = getJdbcTemplate(cfg);
 
             // 3、设置参数
-            int update = jdbcTemplate.update(sql, (ps) -> {
+            update = jdbcTemplate.update(sql, (ps) -> {
                 Field f = null;
                 for (int i = 0; i < size; i++) {
                     f = fields.get(i);
                     SetterEnum.getSetter(f.getType()).set(ps, i + 1, f.getType(), data.get(f.getName()));
                 }
             });
-            if (0 == update) {
-                throw new ConnectorException(String.format("%s表执行%s操作失败, 数据不存在", config.getTable(), event));
-            }
         } catch (Exception e) {
             // 记录错误数据
             result.getFailData().add(data);
@@ -283,6 +281,14 @@ public abstract class AbstractDatabaseConnector implements Database {
             // 释放连接
             this.close(jdbcTemplate);
         }
+
+        if (0 == update && !config.isRetry()) {
+            fields.remove(fields.size() - 1);
+            config.setEvent(ConnectorConstant.OPERTION_INSERT);
+            config.setRetry(true);
+            logger.warn("{}表执行{}失败, 尝试执行{}", config.getTable(), event, config.getEvent());
+            result = writer(config);
+        }
         return result;
     }
 
@@ -370,7 +376,7 @@ public abstract class AbstractDatabaseConnector implements Database {
             queryCount.append(queryFilterSql);
         }
         // Mysql
-        if(appendGroupByPK){
+        if (appendGroupByPK) {
             queryCount.append(" GROUP BY ").append(pk);
         }
         queryCount.append(") DBSYNCER_T");