美文网首页
springboot整合redis的配置类

springboot整合redis的配置类

作者: 彬荣 | 来源:发表于2020-09-09 15:13 被阅读0次
    • redis的相关配置消息订阅
    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    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.listener.PatternTopic;
    import org.springframework.data.redis.listener.RedisMessageListenerContainer;
    import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
    import org.springframework.data.redis.serializer.StringRedisSerializer;
    
    
    @Configuration
    public class RedisConfig {
    
        @Autowired
        private Receiver receiver;
    
        /**
         * 使用Jackson序列化对象
         * @return
         */
        @Bean
        public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer(){
            Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            serializer.setObjectMapper(objectMapper);
            return serializer;
        }
        @Bean
        @SuppressWarnings("all")
        public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisCollectionFactory){
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(redisCollectionFactory);
            //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
    
            StringRedisSerializer stringRedisSerializer=new StringRedisSerializer();
            //key采用String的序列化方式
            redisTemplate.setKeySerializer(stringRedisSerializer);
            //hash的key采用String的序列化方式
            redisTemplate.setHashKeySerializer(stringRedisSerializer);
            //value采用jackson序列化方式
            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
            //hash的value采用jakson方式
            redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer());
            redisTemplate.afterPropertiesSet();
            return redisTemplate;
        }
    
        /**
         * 消息监听器
         */
        @Bean
        MessageListenerAdapter messageListenerAdapter(){
            //消息接收者以及对应的默认处理方法
            MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(receiver, "receiveMessage");
            //消息的反序列化方式
            messageListenerAdapter.setSerializer(jackson2JsonRedisSerializer());
    
            return messageListenerAdapter;
        }
    
        /**
         * message listener container
         */
        @Bean
        RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory
                , MessageListenerAdapter messageListenerAdapter){
            RedisMessageListenerContainer container = new RedisMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
            //添加消息监听器
            container.addMessageListener(messageListenerAdapter, new PatternTopic("topic-test"));
    
            return container;
        }
    
    }
    
    
    • 消息接受类
    @Slf4j
    @Component
    public class Receiver {
    
        public void receiveMessage(User message) {
            log.info(MessageFormat.format("Received Message: {0}", message));
        }
    }

    相关文章

      网友评论

          本文标题:springboot整合redis的配置类

          本文链接:https://www.haomeiwen.com/subject/pzveektx.html