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 @@ +