|
|
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 会覆盖默认的。
|
|