package top.fatweb.oxygen.api.config import com.fasterxml.jackson.annotation.JsonAutoDetect import com.fasterxml.jackson.annotation.JsonTypeInfo import com.fasterxml.jackson.annotation.PropertyAccessor import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule 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.StringRedisSerializer /** * Redis configuration * * @author FatttSnake, fatttsnake@gmail.com * @since 1.0.0 */ @Configuration class RedisConfig { @Bean fun redisTemplate(redisConnectionFactory: RedisConnectionFactory): RedisTemplate<*, *> { val redisTemplate = RedisTemplate() redisTemplate.connectionFactory = redisConnectionFactory val stringRedisSerializer = StringRedisSerializer() val objectMapper = ObjectMapper().registerModules(JavaTimeModule()).apply { setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY) activateDefaultTyping( this.polymorphicTypeValidator, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY ) } val anyJackson2JsonRedisSerializer = Jackson2JsonRedisSerializer(objectMapper, Any::class.java) // Use String Redis Serializer to serialize and deserialize redis key values redisTemplate.keySerializer = stringRedisSerializer redisTemplate.valueSerializer = anyJackson2JsonRedisSerializer // The Hash key also uses the String Redis Serializer serialization method. redisTemplate.hashKeySerializer = stringRedisSerializer redisTemplate.hashValueSerializer = anyJackson2JsonRedisSerializer redisTemplate.afterPropertiesSet() return redisTemplate } }