|
@@ -1,12 +1,17 @@
|
|
|
package org.dromara.common.redis.config;
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
|
|
+import com.fasterxml.jackson.annotation.PropertyAccessor;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.dromara.common.redis.config.properties.RedissonProperties;
|
|
|
import org.dromara.common.redis.handler.KeyPrefixHandler;
|
|
|
import org.dromara.common.redis.manager.PlusSpringCacheManager;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.redisson.codec.JsonJacksonCodec;
|
|
|
+import org.redisson.client.codec.StringCodec;
|
|
|
+import org.redisson.codec.CompositeCodec;
|
|
|
+import org.redisson.codec.TypedJsonJacksonCodec;
|
|
|
import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
|
@@ -35,9 +40,16 @@ public class RedisConfig {
|
|
|
@Bean
|
|
|
public RedissonAutoConfigurationCustomizer redissonCustomizer() {
|
|
|
return config -> {
|
|
|
+ ObjectMapper om = objectMapper.copy();
|
|
|
+ om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
|
|
+ // 指定序列化输入的类型,类必须是非final修饰的。序列化时将对象全类名一起保存下来
|
|
|
+ om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
|
|
|
+ TypedJsonJacksonCodec jsonCodec = new TypedJsonJacksonCodec(Object.class, om);
|
|
|
+ // 组合序列化 key 使用 String 内容使用通用 json 格式
|
|
|
+ CompositeCodec codec = new CompositeCodec(StringCodec.INSTANCE, jsonCodec, jsonCodec);
|
|
|
config.setThreads(redissonProperties.getThreads())
|
|
|
.setNettyThreads(redissonProperties.getNettyThreads())
|
|
|
- .setCodec(new JsonJacksonCodec(objectMapper));
|
|
|
+ .setCodec(codec);
|
|
|
RedissonProperties.SingleServerConfig singleServerConfig = redissonProperties.getSingleServerConfig();
|
|
|
if (ObjectUtil.isNotNull(singleServerConfig)) {
|
|
|
// 使用单机模式
|