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;
   }
現在のクラスのメソッドを呼び出す場合
@Override
    @Cacheable(value={"TeacherAnalysis_public_chart"}, key="#root.target.getDictTableName() + '_' + #root.target.getFieldName()")
    public List> getChartList(Map paramMap) {
    }
    public String getDictTableName(){
        return "";
    }
    public String getFieldName(){
        return "";
    }

呼び出す方法はpublicです.