Quellcode durchsuchen

修复ES不支持byte[] & date时区问题

AE86 vor 3 Jahren
Ursprung
Commit
e5f18d62d2

+ 10 - 10
README.md

@@ -19,37 +19,37 @@ DBSyncer是一款开源的数据同步中间件,提供Mysql、Oracle、SqlServ
             </tr>
             <tr>
                 <td>Mysql</td>
-                <td>✔</td>
-                <td>✔</td>
+                <td>✔</td>
+                <td>✔</td>
                 <td>5.7.19以上</td>
             </tr>
             <tr>
                 <td>Oracle</td>
-                <td>✔</td>
-                <td>✔</td>
+                <td>✔</td>
+                <td>✔</td>
                 <td>10g以上</td>
             </tr>
             <tr>
                 <td>SqlServer</td>
-                <td>✔</td>
-                <td>✔</td>
+                <td>✔</td>
+                <td>✔</td>
                 <td>2008以上</td>
             </tr>
             <tr>
                 <td>ES</td>
-                <td>✔</td>
-                <td>✔</td>
+                <td>✔</td>
+                <td>✔</td>
                 <td>6.X以上</td>
             </tr>
             <tr>
                 <td>Kafka</td>
                 <td>开发中</td>
-                <td>✔</td>
+                <td>✔</td>
                 <td>2.10-0.9.0.0以上</td>
             </tr>
             <tr>
                 <td>SQL</td>
-                <td>✔</td>
+                <td>✔</td>
                 <td></td>
                 <td></td>
             </tr>

+ 21 - 7
dbsyncer-common/src/main/java/org/dbsyncer/common/util/DateFormatUtil.java

@@ -9,20 +9,34 @@ import java.util.Date;
 
 public abstract class DateFormatUtil {
 
-    private static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-    private static final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
+    /**
+     * yyyy-MM-dd HH:mm:ss
+     */
+    public static final DateTimeFormatter CHINESE_STANDARD_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    /**
+     * yyyy-MM-dd
+     */
+    public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    /**
+     * HH:mm:ss
+     */
+    public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
     private static ZoneId zoneId = ZoneId.systemDefault();
 
     public static String getCurrentTime() {
-        return LocalDateTime.now().format(timeFormatter);
+        return LocalDateTime.now().format(TIME_FORMATTER);
     }
 
-    public static String dateToString(Date date){
-        return date.toInstant().atZone(zoneId).toLocalDate().format(dateFormatter);
+    public static String dateToString(Date date) {
+        return date.toInstant().atZone(zoneId).toLocalDate().format(DATE_FORMATTER);
     }
 
-    public static Date stringToDate(String s){
-        LocalDate localDate = LocalDate.parse(s, dateFormatter);
+    public static String dateToChineseStandardTimeString(Date date) {
+        return date.toInstant().atZone(zoneId).toLocalDateTime().format(CHINESE_STANDARD_TIME_FORMATTER);
+    }
+
+    public static Date stringToDate(String s) {
+        LocalDate localDate = LocalDate.parse(s, DATE_FORMATTER);
         Instant instant = localDate.atStartOfDay().atZone(zoneId).toInstant();
         return Date.from(instant);
     }

+ 23 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/convert/handler/BytesToStringHandler.java

@@ -0,0 +1,23 @@
+package org.dbsyncer.parser.convert.handler;
+
+import org.dbsyncer.parser.convert.AbstractHandler;
+
+/**
+ * Byte[]转String
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2021/12/20 23:04
+ */
+public class BytesToStringHandler extends AbstractHandler {
+
+    @Override
+    public Object convert(String args, Object value) {
+        if (value instanceof byte[]) {
+            byte[] b = (byte[]) value;
+            value = new String(b);
+        }
+        return value;
+    }
+
+}

+ 26 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/convert/handler/DateToChineseStandardTimeHandler.java

@@ -0,0 +1,26 @@
+package org.dbsyncer.parser.convert.handler;
+
+import org.dbsyncer.common.util.DateFormatUtil;
+import org.dbsyncer.parser.convert.AbstractHandler;
+
+import java.util.Date;
+
+/**
+ * Date转中国标准时间
+ *
+ * @author AE86
+ * @version 1.0.0
+ * @date 2021/12/20 23:04
+ */
+public class DateToChineseStandardTimeHandler extends AbstractHandler {
+
+    @Override
+    public Object convert(String args, Object value) {
+        if (value instanceof Date) {
+            Date d = (Date) value;
+            value = DateFormatUtil.dateToChineseStandardTimeString(d);
+        }
+        return value;
+    }
+
+}

+ 11 - 3
dbsyncer-parser/src/main/java/org/dbsyncer/parser/enums/ConvertEnum.java

@@ -23,13 +23,17 @@ public enum ConvertEnum {
      */
     SYSTEM_TIMESTAMP("SYSTEM_TIMESTAMP", "系统时间戳", 0, new TimestampHandler()),
     /**
-     * 系统日期date
+     * 系统日期Date
      */
     SYSTEM_DATE("SYSTEM_DATE", "系统日期", 0, new DateHandler()),
     /**
-     * Timestamp转date
+     * Byte[]转String
      */
-    TIMESTAMP_TO_DATE("TIMESTAMP_TO_DATE", "Timestamp转date", 0, new TimestampToDateHandler()),
+    BYTES_TO_STRING("BYTES_TO_STRING", "Byte[]转String", 0, new BytesToStringHandler()),
+    /**
+     * Timestamp转Date
+     */
+    TIMESTAMP_TO_DATE("TIMESTAMP_TO_DATE", "Timestamp转Date", 0, new TimestampToDateHandler()),
     /**
      * Timestamp转Long
      */
@@ -38,6 +42,10 @@ public enum ConvertEnum {
      * Long转Timestamp
      */
     LONG_TO_TIMESTAMP("LONG_TO_TIMESTAMP", "Long转Timestamp", 0, new LongToTimestampHandler()),
+    /**
+     * Date转中国标准时间
+     */
+    DATE_TO_CHINESE_STANDARD_TIME("DATE_TO_CHINESE_STANDARD_TIME", "Date转yyyy-MM-dd HH:mm:ss", 0, new DateToChineseStandardTimeHandler()),
     /**
      * 替换
      */