package com.ssm.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.MapPropertySource; import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisPassword; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import java.util.HashMap; import java.util.Map; @Configuration @EnableCaching @Slf4j public class RedisConfig extends CachingConfigurerSupport { // @Value("${redis.host}") // private String host; // Redis服务器地址 // @Value("${redis.port}") // private int port; // Redis服务器连接端口 @Value("${spring.redis.password}") private String password; // Redis服务器连接密码(默认为空) @Value("${spring.redis.timeout}") private int timeout; // 连接超时时间(毫秒) @Value("${spring.redis.database}") private int database; // @Value("${spring.redis.jedis.pool.max-active}") private int maxTotal; // 连接池最大连接数(使用负值表示没有限制) @Value("${spring.redis.jedis.pool.max-wait}") private int maxWaitMillis; // 连接池最大阻塞等待时间(使用负值表示没有限制) @Value("${spring.redis.jedis.pool.max-idle}") private int maxIdle; // 连接池中的最大空闲连接 @Value("${spring.redis.jedis.pool.min-idle}") private int minIdle; // 连接池中的最小空闲连接 /** * 实例化 RedisTemplate 对象 * @return */ @Bean(name = "redisTemplate") public RedisTemplate functionDomainRedisTemplate(@Qualifier(value = "redisConnectionFactory") RedisConnectionFactory factory) { // logger.info("初始化RedisTemplate"); RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(factory); //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值 Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); serializer.setObjectMapper(mapper); template.setValueSerializer(serializer); //使用StringRedisSerializer来序列化和反序列化redis的key值 template.setKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; } // @Bean // public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { // RedisMessageListenerContainer container = new RedisMessageListenerContainer(); // container.setConnectionFactory(connectionFactory); // return container; // } }