2016-04-26 22 views
0

@CacheEvictと@Cacheableアノテーションを1つのメソッドで呼び出そうとしています。 @CacheEvictの呼び出しで@CacheEvictと@Cacheableアノテーションを1つのメソッドで呼び出す?

@CacheEvict(value = "tripDetailsDashboardCache", key = "#userId") 
@Cacheable(value ="tripDetailsDashboardCache", key="#userId") 
public List<DashBoardObject> getAllDetailsForDashBoard(Integer userId){ 
    List<Master> masters = tripDetailsService.getTripDetailsForCaching(userId); 
    List<DashBoardObject> dashBoardObject = tripDetailsService.getMasterDetailsForDashBoard(userId, masters); 
    return dashBoardObject; 
} 

は、私は特定のキーのためにキャッシュされたデータを削除すると、再び私は、メソッドのレスポンスの新鮮なデータをキャッシュしたいです。しかし、それは新鮮なデータをキャッシュしていませんか?そして、それは何の誤りも与えていないのですか?

答えて

0

@CacheEvictは、メソッドの呼び出し後にデフォルトで実行されます。上記の方法では、#userIdキーでリストをキャッシュしてから、キャッシュを完全にクリアします。

それは私が、私はあなたがキャッシュを更新したいと思います別のキャッシュ可能とキャッシュ追い出し方法に

+0

私は別々のキャッシュ可能およびキャッシュエビクトメソッドを作成しました。それは私が必要とするように動作していません。要件は私はチケットを予約する、それはDBに格納されます、その後、私はこれらの2つのキャッシュメソッドを呼び出す、次に私はキャッシュからデータを取る必要がありますその時ダッシュボードのボタンをクリックしますが、それは取っていません。エラーなし。 –

+0

私はCacheEvictとCacheableの両方を同じメソッドで呼びたいと思っています。最初にキャッシュからデータを削除してから、新しいデータをロードしたいからです。両方のアノテーションを同じメソッドで呼び出すことは可能ですか? –

+0

"beforeInvocation = true"設定を使用できます。誰が勝つのかを予測することは難しい:CacheEvictまたはCacheable – Yura

1

を作成することをお勧めし、そう@CachePutを使用しようと思い、方法があれば、すべての場合に実行されるコードが不明確になりキーが新しく、新しいレコードがキャッシュに追加されます。レコードが古い場合は、古い値が新しい値(更新)で更新されます。

@CachePut(value = "tripDetailsDashboardCache", key = "#userId") 
public List<DashBoardObject> getAllDetailsForDashBoard(Integer userId){ 
    List<Master> masters = tripDetailsService.getTripDetailsForCaching(userId); 
    List<DashBoardObject> dashBoardObject = tripDetailsService.getMasterDetailsForDashBoard(userId, masters); 
    return dashBoardObject; 
} 
0

docsをご覧ください。 @Cacheable、@CachePut、および@CacheEvictを定義できる@Cachingアノテーションがあります。

関連する問題