インスタンス変数とパラメータをキーとしてのスプリングキャッシュ
-
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-annotations /問題/詳細?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
にアクセスできます。e.g.
key="#root.target.b.id+'-'+#c.id"
. 所属していません StackOverflow