食べたい@Cacheable
パラメータのないメソッドの注釈。その場合、@ Cacheableを次のように使用します
@Cacheable(value="usercache", key = "mykey")
public string sayHello(){
return "test"
}
しかし、このメソッドを呼び出すと、実行されず、以下のように例外が発生します
org.springframework.expression.spel.SpelEvaluationException:EL1008E:(pos 0):プロパティまたはフィールド 'mykey'がタイプ 'org.springframework.cache.interceptor.CacheExpressionRootObject'のオブジェクトで見つかりません-おそらくパブリックではありませんか?
提案してください。
SpringはSPEL
のキャッシュキーに静的テキストを提供することを許可していないようで、デフォルトでキーのメソッドの名前が含まれていないため、同じcacheName
を使用し、キーなしで2つのメソッドが同じキーで異なる結果をキャッシュする可能性がある状況。
最も簡単な回避策は、キーとしてメソッドの名前を提供することです。
@Cacheable(value="usercache", key = "#root.methodName")
public string sayHello(){
return "test"
}
これにより、sayHello
がキーとして設定されます。
静的キーが本当に必要な場合は、クラスで静的変数を定義し、#root.target
を使用する必要があります。
public static final String MY_KEY = "mykey";
@Cacheable(value="usercache", key = "#root.target.MY_KEY")
public string sayHello(){
return "test"
}
キーで使用できる here SPEL式のリストを見つけることができます。
mykey
を一重引用符で囲んでください。これはSPEL式であり、一重引用符は再びString
にします。
@Cacheable(value="usercache", key = "'mykey'")
キーに#を追加
@Cacheable(value="usercache", key = "#mykey")
public string sayHello(){
return "test"
}