根据this answer,一个 RedisTemplate
不能支持多个值序列化器 . 所以我想为不同的需求创建多个RedisTemplate,特别是一个用于字符串操作,一个用于JSON序列化的对象,用于 RedisCacheManager
. 我正在使用Spring Boot并且当前的 RedisTemplate
是自动连接的,我'm wondering what'是声明第二个 RedisTemplate
实例共享同一个Jedis连接工厂但有自己的序列化器的正确方法吗?
在两个不同的组件中尝试过类似的东西,
组件1声明,
@Autowired
private RedisTemplate redisTemplate;
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Instance.class));
组件2声明,
@Autowired
private StringRedisTemplate stringRedisTemplate;
在这种情况下,两个模板实际上是相同的 . 追溯到Spring代码,发现组件1的模板已解析为自动配置 stringRedisTemplate
.
手动调用 RedisTemplate
的构造函数,然后它的 afterPropertiesSet()
将无法工作,因为它抱怨没有找到连接工厂 .
我知道这个请求可能与在Spring应用程序中定义另一个bean没什么大不同,但不确定当前的Spring-Data-Redis集成对我来说是最好的方式 . 请帮忙,谢谢 .
1 回答
您可以按照两种方式在一个Spring Boot应用程序中使用多个
RedisTemplate
:使用
@Autowired @Qualifier("beanname") RedisTemplate myTemplate
命名bean注入并使用@Bean(name = "beanname")
创建bean .通过在
RedisTemplate
上指定类型参数(例如@Autowired RedisTemplate<byte[], byte[]> byteTemplate
和@Autowired RedisTemplate<String, String> stringTemplate
)进行类型安全注入 .这是创建两个不同的代码:
HTH,马克