| 
 | 
 
Spring Boot中同时存在“JSON 对象模板”和“二进制模板”的处理方式 
 
下面把“JSON 对象模板”和“二进制模板”放到同一个配置类里,分别注入使用。 
 
- package com.example.config;
 
  
- import org.springframework.context.annotation.Bean;
 
 - import org.springframework.context.annotation.Configuration;
 
 - import org.springframework.context.annotation.Primary;
 
 - import org.springframework.data.redis.connection.RedisConnectionFactory;
 
 - import org.springframework.data.redis.core.RedisTemplate;
 
 - import org.springframework.data.redis.serializer.ByteArrayRedisSerializer;
 
 - import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
 
 - import org.springframework.data.redis.serializer.StringRedisSerializer;
 
  
- @Configuration
 
 - public class RedisTemplateConfig {
 
  
-     // 默认:String -> JSON(Object)
 
 -     @Primary
 
 -     @Bean
 
 -     public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory cf) {
 
 -         RedisTemplate<String, Object> t = new RedisTemplate<>();
 
 -         t.setConnectionFactory(cf);
 
 -         t.setKeySerializer(StringRedisSerializer.UTF_8);
 
 -         t.setHashKeySerializer(StringRedisSerializer.UTF_8);
 
  
-         GenericJackson2JsonRedisSerializer json = new GenericJackson2JsonRedisSerializer();
 
 -         t.setValueSerializer(json);
 
 -         t.setHashValueSerializer(json);
 
  
-         t.afterPropertiesSet();
 
 -         return t;
 
 -     }
 
  
-     // 二进制:String -> byte[]
 
 -     @Bean(name = "binaryRedisTemplate")
 
 -     public RedisTemplate<String, byte[]> binaryRedisTemplate(RedisConnectionFactory cf) {
 
 -         RedisTemplate<String, byte[]> t = new RedisTemplate<>();
 
 -         t.setConnectionFactory(cf);
 
 -         t.setKeySerializer(StringRedisSerializer.UTF_8);
 
 -         t.setHashKeySerializer(StringRedisSerializer.UTF_8);
 
 -         t.setValueSerializer(ByteArrayRedisSerializer.INSTANCE);
 
 -         t.setHashValueSerializer(ByteArrayRedisSerializer.INSTANCE);
 
 -         t.afterPropertiesSet();
 
 -         return t;
 
 -     }
 
 - }
 
  复制代码 使用示例 
 
- @Autowired private RedisTemplate<String, Object> redisTemplate;
 
 - @Autowired @Qualifier("binaryRedisTemplate") private RedisTemplate<String, byte[]> binTpl;
 
  复制代码 
下面是两个config文件,Spring Boot 可同时存在多个 @Configuration,只要 Bean 名称不冲突即可。建议: 
- JSON 用 redisTemplate(覆盖掉 Boot 的默认),或标注 @Primary。
 - 二进制单独命名为 binaryRedisTemplate,注入时用 @Qualifier 指定。
 
 
 示例 - package com.example.config;
 
  
- import org.springframework.context.annotation.*;
 
 - import org.springframework.data.redis.connection.RedisConnectionFactory;
 
 - import org.springframework.data.redis.core.RedisTemplate;
 
 - import org.springframework.data.redis.serializer.*;
 
  
- @Configuration
 
 - public class RedisJsonConfig {
 
  
-     @Primary // 作为默认 RedisTemplate
 
 -     @Bean
 
 -     public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory cf) {
 
 -         RedisTemplate<String, Object> t = new RedisTemplate<>();
 
 -         t.setConnectionFactory(cf);
 
 -         t.setKeySerializer(StringRedisSerializer.UTF_8);
 
 -         t.setHashKeySerializer(StringRedisSerializer.UTF_8);
 
 -         GenericJackson2JsonRedisSerializer json = new GenericJackson2JsonRedisSerializer();
 
 -         t.setValueSerializer(json);
 
 -         t.setHashValueSerializer(json);
 
 -         t.afterPropertiesSet();
 
 -         return t;
 
 -     }
 
 - }
 
  复制代码- package com.example.config;
 
  
- import org.springframework.context.annotation.*;
 
 - import org.springframework.data.redis.connection.RedisConnectionFactory;
 
 - import org.springframework.data.redis.core.RedisTemplate;
 
 - import org.springframework.data.redis.serializer.*;
 
  
- @Configuration
 
 - public class RedisBinaryConfig {
 
  
-     @Bean(name = "binaryRedisTemplate")
 
 -     public RedisTemplate<String, byte[]> binaryRedisTemplate(RedisConnectionFactory cf) {
 
 -         RedisTemplate<String, byte[]> t = new RedisTemplate<>();
 
 -         t.setConnectionFactory(cf);
 
 -         t.setKeySerializer(StringRedisSerializer.UTF_8);
 
 -         t.setHashKeySerializer(StringRedisSerializer.UTF_8);
 
 -         t.setValueSerializer(ByteArrayRedisSerializer.INSTANCE);
 
 -         t.setHashValueSerializer(ByteArrayRedisSerializer.INSTANCE);
 
 -         t.afterPropertiesSet();
 
 -         return t;
 
 -     }
 
 - }
 
  复制代码 使用时 
- @Autowired private RedisTemplate<String, Object> redisTemplate; // JSON
 
 - @Autowired @Qualifier("binaryRedisTemplate") private RedisTemplate<String, byte[]> binTpl; // 二进制
 
  复制代码提示 - Boot 自带的 stringRedisTemplate 仍会存在;你定义的 redisTemplate 会覆盖默认的。
 
 
  |   
 
 
 
 |