liyang 8 months ago
parent
commit
8df8903e59

+ 27 - 2
src/main/java/com/ywt/biz/common/config/redis/LettuceRedisConfig.java

@@ -5,6 +5,8 @@ import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.cache.CacheManager;
@@ -31,9 +33,10 @@ public class LettuceRedisConfig {
 
     private static final StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
 
-    private static Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer ;
+    private static final Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer ;
 
     static {
+        jackson2JsonRedisSerializer= new Jackson2JsonRedisSerializer<>(Object.class);
         //解决value的序列化方式
         //序列化时将类的数据类型存入json,以便反序列化的时候转换成正确的类型
         ObjectMapper objectMapper = new ObjectMapper();
@@ -45,8 +48,30 @@ public class LettuceRedisConfig {
         jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
     }
 
+    @Bean(name = "stringRedisSerializer")
+    private StringRedisSerializer stringRedisSerializer(){
+        return  new StringRedisSerializer() ;
+    }
+
+
+    @Bean(name = "jackson2JsonRedisSerializer")
+    private Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer(){
+        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer= new Jackson2JsonRedisSerializer<>(Object.class);
+        //解决value的序列化方式
+        //序列化时将类的数据类型存入json,以便反序列化的时候转换成正确的类型
+        ObjectMapper objectMapper = new ObjectMapper();
+        //objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
+        // 解决jackson2无法反序列化LocalDateTime的问题
+        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+        objectMapper.registerModule(new JavaTimeModule());
+        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+        return  jackson2JsonRedisSerializer ;
+    }
+
+
     @Bean
-    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory) {
+    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory, StringRedisSerializer stringRedisSerializer, Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer) {
         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
         redisTemplate.setConnectionFactory(connectionFactory);
         //首先解决key的序列化方式