Java 如何将SpringCacheRedis与自定义RestTemplate一起使用?
我正在将我的Spring应用程序从Spring boot 1.5.9迁移到Spring boot 2.0.0。 有了这个新的Spring包,我在Redis中缓存数据时遇到了一些问题 在我的配置中,我有3个具有不同TTL(长、中、短)的CacheManager: 我还有一个自定义RestTemplate:Java 如何将SpringCacheRedis与自定义RestTemplate一起使用?,java,spring,spring-boot,caching,redis,Java,Spring,Spring Boot,Caching,Redis,我正在将我的Spring应用程序从Spring boot 1.5.9迁移到Spring boot 2.0.0。 有了这个新的Spring包,我在Redis中缓存数据时遇到了一些问题 在我的配置中,我有3个具有不同TTL(长、中、短)的CacheManager: 我还有一个自定义RestTemplate: @Bean public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory connectionFactory) {
@Bean
public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<?, ?> template = new RedisTemplate<>();
template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(connectionFactory);
return template;
}
@Bean
公共RedisTemplate RedisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate=新RedisTemplate();
setDefaultSerializer(新的GenericJackson2JsonRedisSerializer());
模板.setConnectionFactory(connectionFactory);
返回模板;
}
在以前的Spring版本中,缓存的每个数据都使用此RestTemplate,并使用GenericJackson2JsonRedisSerializer进行序列化
在新的Spring版本中,CacheManager不使用RestTemplate,而是使用自己的序列化对。这将导致所有正在使用默认JdkSerializationRedisSerializer序列化的内容
是否可以将CacheManager配置为使用RestTemplate以及如何配置?
如果不可能,我该如何使用JacksonSerializer而不是JdkSerializer?我终于找到了一个可行的解决方案。 我无法将CacheManager配置为使用我的RedisTemplate,但我可以如下设置序列化程序:
@Bean(name = "longLifeCacheManager")
public CacheManager longLifeCacheManager(JedisConnectionFactory jedisConnectionFactory) {
RedisCacheConfiguration cacheConfiguration =
RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(redisExpirationLong))
.disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(jedisConnectionFactory).cacheDefaults(cacheConfiguration).build();
}
serializeValuesWith方法是键
@Bean(name = "longLifeCacheManager")
public CacheManager longLifeCacheManager(JedisConnectionFactory jedisConnectionFactory) {
RedisCacheConfiguration cacheConfiguration =
RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(redisExpirationLong))
.disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(jedisConnectionFactory).cacheDefaults(cacheConfiguration).build();
}