@Cacheable
を使用し、同じパラメータで別のメソッドを呼び出すと、同じキーが生成されます。 SimpleKeyGenerator
キャッシュ名なしのキーが生成されました。Spring @CacheableとSimpleKeyGeneratorを使用すると衝突が発生する可能性があります
私はスプリングブート1.3.2とスプリング4.2.4を使用します。ここで
はサンプルです:
@Component
public static class CacheableTestClass {
@Cacheable(cacheNames = "test-cacheproxy-echo1")
public String echo1(String text) {
return text;
}
@Cacheable(cacheNames = "test-cacheproxy-echo2")
public String echo2(String text) {
return "Another " + text;
}
}
、テストを実行します。
assertEquals("OK", cacheableTestClass.echo1("OK"));
assertEquals("Another OK", cacheableTestClass.echo2("OK")); // Failure: expected 'Another OK', actual 'OK'.
ので、この問題を解決する方法はありますか? ありがとうございました。
更新
は、ここに私のCacheManager
構成です。
@Bean
@ConditionalOnMissingBean(name = "cacheRedisTemplate")
public RedisTemplate<Object, Object> cacheRedisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashKeySerializer(template.getKeySerializer());
return template;
}
@Bean
public RedisCacheManager cacheManager(@Qualifier("cacheRedisTemplate") RedisTemplate<Object, Object> cacheRedisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(cacheRedisTemplate);
cacheManager.setDefaultExpiration(
redisCacheProperties().getDefaultExpiration());
cacheManager.setExpires(redisCacheProperties().getExpires());
return cacheManager;
}
CacheManagerの設定を投稿してください。コードスニペットから、異なるキャッシュ名を使用しているときにキーが衝突しないようにしてください。 –
@ekemchitsiga 'CacheManager'の設定を更新してください。 – FalconIA