이 문제를 해결하기 위해 맞춤 키 생성기를 구현했습니다. 아직도 나는 이것이 맞춤 키 생성기를 사용하지 않고 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;
}
}
}
사과. 스프링 캐쉬 주석을 달았습니다. ehcache의 @Cacheable 주석에는 '키'가 없습니다. @ 캐시 가능 (cacheName = "homeCache", keyGenerator = .......) – falcon