1

Spring Framework のキャッシュ抽象化を使用して、キャッシュされたオブジェクトの具体化を常に返す方法はありますか?

画像のサイズ変更方法があります。このresize()メソッドは、Spring のキャッシュ抽象化をFile使用して手巻きバイナリを使用してキャッシュされた一時を返します。Cacheメソッド自体は経由でキャッシュされ@Cacheable、すべて正常に動作します。

問題は、このメソッドによって生成された一時ファイルがキャッシュに追加された後で、それらを何らかの方法でクリーンアップする必要があることです。

つまり、現在の動作は次のとおりです。

  1. -の最初の呼び出しは、Spring によってキャッシュに追加されるresize()生成されたファイルを返します。/tmp/somefile.jpg

  2. -の 2 回目の呼び出しでresize()はキャッシュ ヒットが発生するため、次のファイルが返されます/myCache/somefile.jpg

これにより、一時ファイルが残ります。

メソッド内のソース ファイルを削除できませんCache#put(Object key, Object value)。これは、関連付けられたメソッドのキャッシュされていない呼び出しから返されたファイルであるためです。

誰かが同様の状況に遭遇し、エレガントなソリューションで解決しましたか? 理想的には、キャッシュ可能なメソッドのすべての呼び出しで、キャッシュされたオブジェクトが返されるようにしたいと考えています。

4

1 に答える 1

2

私は、SpringのよりエレガントなアノテーションベースのアプローチをバイパスしてCache#get()、およびと直接対話することでこの問題を回避しました。Cache#put()

美しくはありませんが、機能します。

于 2013-01-25T19:33:03.330 に答える