2

アプリケーションをSpring3.1にアップグレードし、すべてのjarファイルが適切に更新されました。しかし、コントローラーの1つでメソッドに@Cacheableを使用しようとすると、そのコントローラーのすべてのメソッドのURLマッピングが機能しなくなります。ログファイルを確認したところ、そのコントローラーのすべてのメソッドのURLマッピングが検出されなかったことがわかりました。キャッシュ構成は問題ないと確信しています。誰かが私が間違っているかもしれないこととして私にいくつかの手がかりを与えることができますか?

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<defaultCache
eternal="false"
maxElementsInMemory="2" 
overflowToDisk="false" 
diskPersistent="false" 
timeToLiveSeconds="300"
memoryStoreEvictionPolicy="LRU" />

<cache name="Backlog"  
eternal="false"
maxElementsInMemory="2" 
overflowToDisk="false" 
diskPersistent="false" 
timeToLiveSeconds="300"
memoryStoreEvictionPolicy="LRU" />
</ehcache>

構成:

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
    <property name="cacheManager">
        <ref bean="ehcache" />
    </property>
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="/WEB-INF/spring-configuration/ehcache.xml" />

コードスニペット:

@RequestMapping("/*/backlog")
@Cacheable(value = "Backlog")
public ModelAndView getBackLog(){ 
    //sth here
}

助けてくれてありがとう。

4

3 に答える 3

4

@manaがこれを修正する方法を説明している間、これが追加が@Cacheableコードを壊す理由です。最近のブログ投稿でこれについて詳しく説明されており、一読する価値があります。

デフォルトでは、Springはキャッシング動作を実現するためにJDK動的プロキシを作成します。これには、プロキシされるクラスが、クラスで公開するすべてのメソッドを宣言するインターフェースを実装する必要があります@Cacheable。CGLIBベースのプロキシを使用するようにSpringを構成する場合は、インターフェースを実装する必要がないことに注意してください。

特定のエラーを指定していませんが、このシナリオではメソッドが見つからないという例外が発生することがよくあります。getBackLog()Springはプロキシでメソッドを呼び出そうとしますが、メソッドはありません。

于 2012-06-25T12:36:39.217 に答える
3

コントローラメソッド自体をキャッシュするのではなく、バックログを作成するために呼び出されるリソースを大量に消費するメソッドをキャッシュする必要があります。この同様の質問を見てください。@Cachable関数パラメーターと関連する戻り値のキー値マップを作成するのは何ですか。あなたの場合、これはModelAndViewオブジェクトになります。

サーバー側のWebページのキャッシュが本当に必要な場合は、このApacheキャッシュモジュールを使用してください。

于 2012-06-25T11:27:05.750 に答える
0

サービスクラスをコントローラーに注入し、サービスクラスのメソッドをキャッシュする必要があります

于 2012-06-25T11:40:05.490 に答える