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

支持序列化BigInteger LocalDateTime

AE86 2 жил өмнө
parent
commit
e6f8910b58

+ 11 - 0
dbsyncer-storage/src/main/java/org/dbsyncer/storage/util/BinlogMessageUtil.java

@@ -11,9 +11,11 @@ import org.slf4j.LoggerFactory;
 
 import java.io.InputStream;
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 import java.sql.*;
+import java.time.LocalDateTime;
 import java.util.BitSet;
 
 /**
@@ -87,6 +89,10 @@ public abstract class BinlogMessageUtil {
                 buffer.putInt((Integer) v);
                 buffer.flip();
                 return ByteString.copyFrom(buffer, 4);
+            case "java.math.BigInteger":
+                BigInteger bigInteger = (BigInteger) v;
+                byte[] bytes = bigInteger.toByteArray();
+                return ByteString.copyFrom(bytes, 0, 8);
             case "java.lang.Long":
                 buffer.clear();
                 buffer.putLong((Long) v);
@@ -121,6 +127,11 @@ public abstract class BinlogMessageUtil {
                 buffer.putShort((short) (b ? 1 : 0));
                 buffer.flip();
                 return ByteString.copyFrom(buffer, 2);
+            case "java.time.LocalDateTime":
+                buffer.clear();
+                buffer.putLong(Timestamp.valueOf((LocalDateTime) v).getTime());
+                buffer.flip();
+                return ByteString.copyFrom(buffer, 8);
             case "oracle.sql.TIMESTAMP":
                 buffer.clear();
                 TIMESTAMP timeStamp = (TIMESTAMP) v;

+ 3 - 0
dbsyncer-storage/src/main/test/ShardBinlogTest.java

@@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.nio.charset.Charset;
 import java.sql.Date;
 import java.sql.Timestamp;
@@ -160,6 +161,8 @@ public class ShardBinlogTest {
         data.put("name", key + "中文");
         data.put("age", 88);
         data.put("bd", new BigDecimal(88));
+        data.put("bigInt", new BigInteger("123456789876543210"));
+        data.put("localTime", LocalDateTime.now());
         data.put("sex", 1);
         data.put("f", 88.88f);
         data.put("d", 999.99d);