EhCache 実装を使用して Spring の (3.1) 組み込み CacheManager を使用すると、この投稿に従ってプロキシ モード (デフォルト) で特定の制限があることを理解しています。
Spring 3.1 @Cacheable - メソッドがまだ実行されている
私が持っているシナリオを考えてみましょう:
@CacheEvict(value = "tacos", key = "#tacoId", beforeInvocation = true)
removeTaco(String tacoId) {
// Code to remove taco
}
removeTacos(Set<String> tacoIds) {
for (String tacoId : tacoIds) {
removeTaco(tacoId);
}
}
このリポジトリ メソッドでは、removeTacos(tacoIds) を呼び出しても、上記の制限により、実際にはキャッシュから何も削除されません。私の回避策は、上記のサービス層で、複数のタコスを削除したい場合、各タコス ID をループして removeTaco() に渡し、決して removeTacos() を使用しないことです。
ただし、これを達成する別の方法があるかどうかは疑問です。
1) セット内のすべての ID を期限切れにするように EhCache に指示するキーに渡すことができる SpEL 式はありますか?
e.g. @CacheEvict(value = "tacos", key = "#ids.?[*]") // I know this isn't valid, just can't find the expression.
または、removeTacos() で removeTaco を呼び出して、実際に Cached オブジェクトを期限切れにする方法はありますか?