インスタンス変数とパラメータをキーとしてのスプリングキャッシュ

StackOverflow https://stackoverflow.com//questions/22019291

質問

メソッド結果をキャッシュするための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"
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top