SpringキャッシュにNULL値をキャッシュしないように@Cacheableアノテーションを指定する方法
質問
このようなメソッドの@Cacheableアノテーションで、メソッドがNULL値を返した場合、その結果をキャッシュしないように指定する方法はありますか?
@Cacheable(value="defaultCache", key="#pk")
public Person findPerson(int pk) {
return getSession.getPerson(pk);
}
更新しました。 は、昨年 11 月に提出された null 値のキャッシュに関する JIRA issue で、これはまだ解決されていません。 [#SPR-8871] @Cachable condition は戻り値を参照できるようにすべき - Spring Projects Issue Tracker
どのように解決するのですか?
なんと、Spring 3.2からはフレームワークでSpring SPELを使用して、このようなことが可能になりました。
unless
. Cacheableを取り巻くjavaドキュメントからのメモです。
public abstract String unless
Spring Expression Language (SpEL)の属性で、メソッドキャッシュを拒否するために使用されます。
condition()とは異なり、この式はメソッドが呼び出された後に評価されるため、結果を参照することができます。デフォルトは""で、キャッシュが拒否されないことを意味します。
重要な点は
unless
はメソッドが呼び出された後に評価されることです。キーがすでにキャッシュにある場合、メソッドは決して実行されないので、これは完全に理にかなっています。
したがって、上記の例では、単に次のようにアノテーションします(#resultはメソッドの戻り値をテストするために利用できます)。
@Cacheable(value="defaultCache", key="#pk", unless="#result == null")
public Person findPerson(int pk) {
return getSession.getPerson(pk);
}
私は、この条件は、NULLのキャッシュを可能にするEhcacheのようなプラグインキャッシュの実装を使用することから発生すると想像しています。あなたのユースケースのシナリオによって、これは望ましいかもしれませんし、望ましくないかもしれません。
関連
-
[解決済み] Spring Bootアプリケーションにポートを設定する方法
-
[解決済み] Spring の @Autowired フィールドが NULL になっているのはなぜですか?
-
[解決済み] Spring Data JPAでネイティブクエリ結果をNon-Entity POJOにマップする。
-
[解決済み] Spring Dataです。"delete by "はサポートされていますか?
-
[解決済み] Spring Bootアプリケーションの環境指定application.propertiesファイル [終了しました]。
-
[解決済み] Intellij IDEAがSpring Bootのプロパティを解決できないと訴えるが、問題なく動作している
-
[解決済み] Springは@Autowiredアノテーションを付けずにコンストラクタに依存性を注入する
-
[解決済み] Map または Properties オブジェクトとしてすべての環境プロパティにアクセスする
-
[解決済み] RequestBodyと@RequestParamの違いは何ですか?
-
[解決済み] RestTemplateを使用する場合、内部Jacksonマッパーはどのように構成されますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Spring Data JPAでネイティブクエリ結果をNon-Entity POJOにマップする。
-
[解決済み] java:comp/env/は何をするところですか?
-
[解決済み] Spring Boot - 実行中のポートを取得する方法
-
[解決済み] Spring Dataです。"delete by "はサポートされていますか?
-
[解決済み] Spring CrudRepositoryで大文字小文字を区別しないクエリ
-
[解決済み] Spring Securityをセッションなしで使用するにはどうすればよいですか?
-
[解決済み] Spring Bootアプリケーションの環境指定application.propertiesファイル [終了しました]。
-
[解決済み] SpringデータのJPAクエリでパラメータプロパティを使用する
-
[解決済み] Spring MVCアプリケーションにSwaggerを実装する「簡単な」方法
-
[解決済み] Spring-BootプロジェクトでCSSなどの静的ファイルをどこに置くか?