Я пытаюсь переопределить KeyGenerator для всего класса, но не знаю, есть ли простой способ сделать это.
У меня есть следующая настройка bean-компонента конфигурации для включения моего кеша:
@Configuration
@EnableCaching(mode=AdviceMode.ASPECTJ)
public class CacheConfig extends CachingConfigurerSupport{
@Bean(destroyMethod="shutdown")
public net.sf.ehcache.CacheManager ehCacheManager() {
CacheConfiguration configCache = new CacheConfiguration();
veracodeCache.setName("repo");
net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration();
config.addCache(configCache);
return net.sf.ehcache.CacheManager.newInstance(config);
}
@Bean
@Override
public CacheManager cacheManager() {
return new EhCacheCacheManager(ehCacheManager());
}
@Bean
@Override
public KeyGenerator keyGenerator() {
return new SimpleKeyGenerator();
}
}
Однако в конкретном классе я хотел бы использовать другой генератор ключей. Я знаю, что могу переопределить отдельный генератор ключей в каждом вызове @Cacheable
, но не смог найти способ переопределить его для класса в целом.
ex:
@KeyGenerator("com.domain.MyCustomKeyGenerator") // <--- anyway to set a different key gen for the entire class?
public class Repo{
@Cacheable("repo")
public String getName(int id){
return "" + id;
}
}
Согласно документам, если я установлю @Cacheable
для типа, все методы будут кэшированы (это не то, что я ищу).
Мой другой вариант, конечно, - указать @Cacheable(value="repo", keyGenerator="com.domain.MyCustomKeyGenerator")
для каждого метода, но это очень избыточно, особенно если я хочу изменить генератор ключей по умолчанию для нескольких классов.
Есть ли поддержка для этого?