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) // 使用StringRedisSerializer来序列化和反序列化redis的key值 redisTemplate.keySerializer = stringRedisSerializer redisTemplate.valueSerializer = anyJackson2JsonRedisSerializer // Hash的key也采用StringRedisSerializer的序列化方式 redisTemplate.hashKeySerializer = stringRedisSerializer redisTemplate.hashValueSerializer = anyJackson2JsonRedisSerializer redisTemplate.afterPropertiesSet() return redisTemplate } }