diff --git a/common/pom.xml b/common/pom.xml
index 72c729ea..408c3ccb 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -79,6 +79,13 @@
snakeyaml
${snakeyaml.version}
+
+
+
+ org.apache.fury
+ fury-core
+ ${fury.version}
+
diff --git a/common/src/main/java/com/jeesite/common/lang/ObjectUtils.java b/common/src/main/java/com/jeesite/common/lang/ObjectUtils.java
index c6daab5f..7431c9c0 100644
--- a/common/src/main/java/com/jeesite/common/lang/ObjectUtils.java
+++ b/common/src/main/java/com/jeesite/common/lang/ObjectUtils.java
@@ -4,7 +4,11 @@
*/
package com.jeesite.common.lang;
+import com.jeesite.common.io.PropertiesUtils;
import org.apache.commons.lang3.BooleanUtils;
+import org.apache.fury.Fury;
+import org.apache.fury.ThreadSafeFury;
+import org.apache.fury.config.Language;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -24,6 +28,23 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
private static final Logger logger = LoggerFactory.getLogger(ObjectUtils.class);
+ /**
+ * 当前类的实例持有者(静态内部类,延迟加载,懒汉式,线程安全的单例模式)
+ */
+ private static final class Static {
+ private static final Boolean isJavaSerialize;
+ private static final ThreadSafeFury fury;
+ static {
+ isJavaSerialize = PropertiesUtils.getInstance()
+ .getPropertyToBoolean("isJavaSerialize", "false");
+ org.apache.fury.logging.LoggerFactory.useSlf4jLogging(true);
+ fury = Fury.builder().withLanguage(Language.JAVA)
+ .withRefTracking(true)
+ .requireClassRegistration(false)
+ .buildThreadSafeFury();
+ }
+ }
+
/**
* 转换为 Double 类型
*/
@@ -145,8 +166,7 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
return null;
}
byte[] bytes = ObjectUtils.serialize(source);
- Object target = ObjectUtils.unserialize(bytes);
- return target;
+ return ObjectUtils.unserialize(bytes);
}
/**
@@ -156,7 +176,11 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
*/
public static byte[] serialize(Object object) {
try {
- return ObjectUtils.serializeJava(object);
+ if (Static.isJavaSerialize) {
+ return ObjectUtils.serializeJava(object);
+ } else {
+ return ObjectUtils.serializeFury(object);
+ }
} catch (Exception e) {
logger.error("serialize: {}", e.getMessage());
}
@@ -170,7 +194,11 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
*/
public static Object unserialize(byte[] bytes) {
try {
- return ObjectUtils.unserializeJava(bytes);
+ if (Static.isJavaSerialize) {
+ return ObjectUtils.unserializeJava(bytes);
+ } else {
+ return ObjectUtils.unserializeFury(bytes);
+ }
} catch (Exception e) {
logger.error("unserialize: {}", e.getMessage());
}
@@ -228,6 +256,43 @@ public class ObjectUtils extends org.apache.commons.lang3.ObjectUtils {
return object;
}
+
+ /**
+ * 序列化对象
+ * @param object
+ * @return
+ */
+ public static byte[] serializeFury(Object object) {
+ if (object == null){
+ return null;
+ }
+ long beginTime = System.currentTimeMillis();
+ byte[] bytes = Static.fury.serialize(object);
+ long totalTime = System.currentTimeMillis() - beginTime;
+ if (totalTime > 30000){
+ logger.warn(object.getClass() + " serialize time: " + TimeUtils.formatTime(totalTime));
+ }
+ return bytes;
+ }
+
+ /**
+ * 反序列化对象
+ * @param bytes
+ * @return
+ */
+ public static Object unserializeFury(byte[] bytes) {
+ if (bytes == null){
+ return null;
+ }
+ long beginTime = System.currentTimeMillis();
+ Object object = Static.fury.deserialize(bytes);
+ long totalTime = System.currentTimeMillis() - beginTime;
+ if (totalTime > 30000 && object != null){
+ logger.warn(object.getClass() + " unserialize time: " + TimeUtils.formatTime(totalTime));
+ }
+ return object;
+ }
+
// private static ThreadLocal fstConfiguration =
// new NamedThreadLocal("FSTConfiguration") {
// @Override
diff --git a/modules/core/src/main/resources/config/logger-core.xml b/modules/core/src/main/resources/config/logger-core.xml
index 7cc46386..aabad79a 100644
--- a/modules/core/src/main/resources/config/logger-core.xml
+++ b/modules/core/src/main/resources/config/logger-core.xml
@@ -6,6 +6,8 @@
+
+
diff --git a/web-mini/src/main/resources/config/logger-core.xml b/web-mini/src/main/resources/config/logger-core.xml
index de9a0540..5a32ad46 100644
--- a/web-mini/src/main/resources/config/logger-core.xml
+++ b/web-mini/src/main/resources/config/logger-core.xml
@@ -4,8 +4,11 @@
+
-
+
+
+
@@ -17,20 +20,22 @@
-
-
+
+
+
-
+
-
+
+
@@ -39,6 +44,7 @@
+