Весенний кеш с переменной экземпляра и параметр в качестве ключа
-
21-12-2019 - |
Вопрос
Я использую Ehcache для кэширования результатов метода.Ключ должен быть комбинацией объекта элемента, так и параметра метода.Мой класс выглядит что-то вроде:
Class A {
private B b;
@Cacheable(value="someCache",key="some key based on B and C")
public Result getResult(C c){
......
}
.
Мне нужен ключ, который будет основан на B и C. Я передал https://code.google.com/p/ Ehcache-Spring-Andlotions / Выпуски / Деталь? ID= 69 Но они не указывали, как включить параметр метода в ключевой генерации.Может ли кто-нибудь помочь мне с этим?
Решение 2
Я реализовал пользовательский ключевой генератор для решения этого.Все же я думаю, что это может быть решено Ehcache, не используя пользовательский генератор ключей.Но я не мог получить ответ где угодно.Пожалуйста, смотрите мой ответ ниже:
@Component
public class Home {
private Parameter param;
@Cacheable(cacheName = "homeCache",
keyGenerator = @KeyGenerator(name = "com.myapp.cache.Home.ParamKeyGenerator"))
public Result getPerson(Person p) {
//Do something with p
return result;
}
public Parameter getParam() {
return param;
}
public void setParam(Parameter param) {
this.param = param;
}
public static class ParamKeyGenerator implements CacheKeyGenerator<Serializable> {
public Serializable generateKey(MethodInvocation methodInvocation) {
Object[] obj = methodInvocation.getArguments();
Home h = (Home) methodInvocation.getThis();
return this.generateKey(obj[0], h.getParam());
}
public Serializable generateKey(Object... data) {
String key = ((Person) data[0]).getName() + ((Parameter) data[1]).getName();
System.out.println("generating key: " + key);
return key;
}
}
}
. Другие советы
Вы можете получить доступ к объекту A
с root.target
в клавише.например.
key="#root.target.b.id+'-'+#c.id"
.