Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将SpringCacheRedis与自定义RestTemplate一起使用?_Java_Spring_Spring Boot_Caching_Redis - Fatal编程技术网

Java 如何将SpringCacheRedis与自定义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) {

我正在将我的Spring应用程序从Spring boot 1.5.9迁移到Spring boot 2.0.0。 有了这个新的Spring包,我在Redis中缓存数据时遇到了一些问题

在我的配置中,我有3个具有不同TTL(长、中、短)的CacheManager:

我还有一个自定义RestTemplate:

@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();
}