私たちのプロジェクトでは、キャッシングの目的で ehcache を使用しています。
import com.googlecode.ehcache.annotations.Cacheable;
// Other imports
@Component
public class Authenticator{
@Cacheable(cacheName = "rest_client_authorized")
public boolean isUserAuthorized(final String user, final String sessionId) {
// Method code
}
}
メソッドに入るとき、キャッシュインターセプターはありません。これまでに確認したこと:
- このメソッドはクラス内からではなく、外部から呼び出します。したがって、問題はプロキシをバイパスする内部呼び出しではありません。
- このクラスのインターフェイスを追加し、このクラスが呼び出されるインジェクションを、具象クラスの代わりにインターフェイス表現を使用するように変更しました。
アプリケーション コンテキストでキャッシュ マネージャーを次のように定義しました。
<ehcache:annotation-driven cache-manager="ehCacheManager" />
<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<!-- use a share singleton CacheManager -->
<property name="shared" value="true" />
</bean>
キャッシュは次のように定義されます。
<cache name="rest_client_authorized"
eternal="false"
maxElementsInMemory="50"
overflowToDisk="false" diskPersistent="false"
timeToIdleSeconds="0" timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LRU" />
Jconsole を使用してキャッシュ マネージャーをテストすると、キャッシュ *rest_auth_disabled* が存在し、空であることがわかります。
なぜこれが機能しないのかについてのアイデアは非常に高く評価されます。ありがとう!
更新 (以下のコメントからの集計) :
==========================================**
これは、私が提供したクラスと定義で問題なく動作する従来のコードです。ここで説明する方法は新しいものですが、クラスの残りの部分は過去に機能していました。そのため、何が変わったのかを理解するのに苦労しています。また、注釈を spring Cacheable に置き換えようとしましたが、まだ何もありません :/ おそらく、この新しいメソッドを呼び出すコードに依存します。これは、他のメソッドに使用したものとは異なる Spring Bean からのものです。しかし、私はまだ問題を見つけることができません。
また、以下の回答に従ってブール値ではなくブール値を返そうとしましたが、うまくいきませんでした。(@Autowire を使用して) Bean を注入する方法におそらく関連する新しいリードがあります。それが実際に当てはまる場合は更新されます。