Spring@Cacheableのkey生成
2113 ワード
key属性はSpringキャッシュメソッドの戻り結果を指定するためのkeyです.この属性はSpringEL式をサポートします.この属性が指定されていない場合、Springはデフォルトのポリシーを使用してkeyを生成します.ここでは、カスタムポリシーについて説明します.デフォルトポリシーについては、後述します.
カスタムポリシーとは、SpringのEL式でkeyを指定できることです.ここでのEL式では,メソッドパラメータとそれらに対応する属性を用いることができる.メソッドパラメータを使用する場合は、「#パラメータ名」または「#pパラメータindex」を直接使用できます.以下にkeyとしてパラメータを使用する例をいくつか示します.
@Cacheable(value="users", key="#id")
public User find(Integer id) {
returnnull;
}
@Cacheable(value="users", key="#p0")
public User find(Integer id) {
returnnull;
}
@Cacheable(value="users", key="#user.id")
public User find(User user) {
returnnull;
}
@Cacheable(value="users", key="#p0.id")
public User find(User user) {
returnnull;
}
Springは、keyとして上記の使用方法パラメータに加えて、keyを生成するためにrootオブジェクトを提供します.このrootオブジェクトから以下の情報を取得できます.
属性名
説明
例
methodName
現在のメソッド名
#root.methodName
method
現在のメソッド
#root.method.name
target
現在呼び出されているオブジェクト
#root.target
targetClass
現在呼び出されているオブジェクトのclass
#root.targetClass
args
現在のメソッドパラメータからなる配列
#root.args[0]
caches
現在呼び出されているメソッドで使用されているCache
#root.caches[0].name
Springではデフォルトでrootオブジェクトのプロパティが使用されるため、rootオブジェクトのプロパティとしてrootオブジェクトのプロパティを使用する場合は「#root」を省略することもできます.次のようになります.
@Cacheable(value={"users", "xxx"}, key="caches[1].name")
public User find(User user) {
returnnull;
}
現在のクラスのメソッドを呼び出す場合
呼び出す方法はpublicです.
カスタムポリシーとは、SpringのEL式でkeyを指定できることです.ここでのEL式では,メソッドパラメータとそれらに対応する属性を用いることができる.メソッドパラメータを使用する場合は、「#パラメータ名」または「#pパラメータindex」を直接使用できます.以下にkeyとしてパラメータを使用する例をいくつか示します.
@Cacheable(value="users", key="#id")
public User find(Integer id) {
returnnull;
}
@Cacheable(value="users", key="#p0")
public User find(Integer id) {
returnnull;
}
@Cacheable(value="users", key="#user.id")
public User find(User user) {
returnnull;
}
@Cacheable(value="users", key="#p0.id")
public User find(User user) {
returnnull;
}
Springは、keyとして上記の使用方法パラメータに加えて、keyを生成するためにrootオブジェクトを提供します.このrootオブジェクトから以下の情報を取得できます.
属性名
説明
例
methodName
現在のメソッド名
#root.methodName
method
現在のメソッド
#root.method.name
target
現在呼び出されているオブジェクト
#root.target
targetClass
現在呼び出されているオブジェクトのclass
#root.targetClass
args
現在のメソッドパラメータからなる配列
#root.args[0]
caches
現在呼び出されているメソッドで使用されているCache
#root.caches[0].name
Springではデフォルトでrootオブジェクトのプロパティが使用されるため、rootオブジェクトのプロパティとしてrootオブジェクトのプロパティを使用する場合は「#root」を省略することもできます.次のようになります.
@Cacheable(value={"users", "xxx"}, key="caches[1].name")
public User find(User user) {
returnnull;
}
現在のクラスのメソッドを呼び出す場合
@Override
@Cacheable(value={"TeacherAnalysis_public_chart"}, key="#root.target.getDictTableName() + '_' + #root.target.getFieldName()")
public List
呼び出す方法はpublicです.