web-dev-qa-db-ja.com

Spring Rest RedisをカスタムRestTemplateで使用する方法

SpringアプリケーションをSpring-boot 1.5.9からSpring-boot 2.0.0に移行しています。この新しいSpringバンドルでは、Redisでのデータのキャッシュにいくつか問題があります。

私の構成では、異なるTTL(long、medium、short)の3つのCacheManagerがあります:

@Bean(name = "longLifeCacheManager")
public CacheManager longLifeCacheManager() {
    RedisCacheConfiguration cacheConfiguration =
            RedisCacheConfiguration.defaultCacheConfig()
                    .entryTtl(Duration.ofSeconds(redisExpirationLong))
                    .disableCachingNullValues();
    return RedisCacheManager.builder(jedisConnectionFactory()).cacheDefaults(cacheConfiguration).build();
}

カスタムRestTemplateもあります。

@Bean
public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<?, ?> template = new RedisTemplate<>();
    template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
    template.setConnectionFactory(connectionFactory);
    return template;
}

以前のSpringバージョンでは、キャッシュされるすべてのデータはこのRestTemplateを使用し、GenericJackson2JsonRedisSerializerでシリアル化されました。

新しいSpringバージョンでは、CacheManagerはRestTemplateを使用せず、独自のSerializationPairを使用します。これにより、デフォルトのJdkSerializationRedisSerializerを使用してすべてがシリアル化されます。

RestTemplateを使用するようにCacheManagerを構成することは可能ですか?それが不可能な場合、JdkSerializerの代わりにJacksonSerializerを使用するにはどうすればよいですか?

10
YLombardi

私は最終的に実用的な解決策を見つけました。 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メソッドが重要です。

12
YLombardi