Генерация уникального ключа кеша с Spring KeyGenerator не работает

У меня проблема, когда мои ключи кеша сталкиваются в Spring с помощью@Cacheable аннотаций. Например, с помощью следующих двух методов:

@Cacheable("doOneThing")
public void doOneThing(String name) {
  // do something with name
}

@Cacheable("doAnotherThing")
public void doAnotherThing(String name) {
  // do some other thing with name
}

Вот моя конфигурация кеша, в которую я добавилkeyGenerator иcacheManager боб:

@Configuration
@EnableCaching
public class CacheConfig {

  @Bean
  public JedisConnectionFactory redisConnectionFactory() {
    return new JedisConnectionFactory();
  }

  @Bean
  public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
    RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
    redisTemplate.setConnectionFactory(cf);
    return redisTemplate;
  }

  @Bean
  public CacheManager cacheManager(RedisTemplate redisTemplate) {
    return new RedisCacheManager(redisTemplate);
  }

  @Bean
  public KeyGenerator keyGenerator() {
    return new KeyGenerator() {
      @Override
      public Object generate(Object o, Method method, Object... params) {
        StringBuilder sb = new StringBuilder();
        sb.append(o.getClass().getName());
        sb.append(method.getName());
        for (Object param : params) {
          sb.append(param.toString());
        }
        return sb.toString();
      }
    };
  }
}

По какой-то причине ключ кеша всегда устанавливается наname параметр в методе, а не результатkeyGenerator.generate(..) метод, в результате чего оба метода возвращают один и тот же результат кэширования.

Я знаю, что могу указать ключ вручную на каждом@Cacheable аннотации, но это кажется немного обширным для каждого метода, который я хотел бы кэшировать.

редактировать

Я заметил, что установкаkeyGenerator вариант внутри@Cacheable аннотация к имени моего компонента решает проблему следующим образом:

@Cacheable(value = "doOneThing", keyGenerator = "keyGenerator")
public void doOneThing(String name) {
  // do something with name
}

И настройкаkeyGenerator вариант в@CacheConfig аннотация на класс также решает проблему. Кажется, что это не должно быть необходимым, хотя. Я что-то пропустил?

Ответы на вопрос(1)

Ваш ответ на вопрос