|
@@ -0,0 +1,77 @@
|
|
|
+package com.ruoyi.demo.config;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
|
|
+import com.fasterxml.jackson.annotation.PropertyAccessor;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.fasterxml.jackson.databind.SerializationFeature;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
+import org.springframework.context.annotation.Configuration;
|
|
|
+import org.springframework.data.redis.connection.RedisConnectionFactory;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
|
|
+import org.springframework.data.redis.serializer.RedisSerializer;
|
|
|
+import org.springframework.data.redis.serializer.StringRedisSerializer;
|
|
|
+
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+
|
|
|
+@Configuration
|
|
|
+@Slf4j
|
|
|
+public class RedisConfiguration {
|
|
|
+ // @Bean 把方法的返回值对象放到IOC容器中
|
|
|
+ @Bean
|
|
|
+ public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
|
|
|
+ RedisTemplate<Object,Object> redisTemplate = new RedisTemplate();
|
|
|
+
|
|
|
+ redisTemplate.setConnectionFactory(redisConnectionFactory);
|
|
|
+ // 设置Redis的key使用字符串序列化器,解决key可读性差的问题。
|
|
|
+ redisTemplate.setKeySerializer(new StringRedisSerializer());
|
|
|
+ redisTemplate.setHashKeySerializer(new StringRedisSerializer());
|
|
|
+
|
|
|
+ //redis和Springboot直接交互的序列化器
|
|
|
+ redisTemplate.setDefaultSerializer(valueSerializer());
|
|
|
+
|
|
|
+ // 设置Redis的value使用JSON序列化器,解决value可读性差的问题。
|
|
|
+ redisTemplate.setValueSerializer(valueSerializer());
|
|
|
+ redisTemplate.setHashValueSerializer(valueSerializer());
|
|
|
+
|
|
|
+ redisTemplate.setConnectionFactory(redisConnectionFactory);
|
|
|
+ return redisTemplate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 值采用JSON序列化
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private RedisSerializer<Object> valueSerializer() {
|
|
|
+ Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
|
|
|
+ ObjectMapper om = new ObjectMapper();
|
|
|
+ om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
|
|
|
+ om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
|
|
|
+
|
|
|
+ //LocalDate、LocalDateTime序列化器
|
|
|
+ JavaTimeModule timeModule = new JavaTimeModule();
|
|
|
+ timeModule.addDeserializer(LocalDate.class,
|
|
|
+ new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+ timeModule.addDeserializer(LocalDateTime.class,
|
|
|
+ new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+ timeModule.addSerializer(LocalDate.class,
|
|
|
+ new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
|
|
+ timeModule.addSerializer(LocalDateTime.class,
|
|
|
+ new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+
|
|
|
+ om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
|
|
+ om.registerModule(timeModule);
|
|
|
+
|
|
|
+ jackson2JsonRedisSerializer.setObjectMapper(om);
|
|
|
+ return jackson2JsonRedisSerializer;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|