2013-01-15 13 views
6

ehcacheおよびアノテーション駆動型の設定でspringメソッドのキャッシュを設定しました。外部プロパティーによるスプリングメソッドのキャッシュを無効にする

ただし、アプリケーションで使用する設定ファイルから無効にすることができます。

私の最初のアイデアは、メソッドキャッシングが無効になっている場合は、引数なしでnet.sf.ehcache.CacheManager.CacheManager()を呼び出すことでした。これは、例外をスロー:

java.lang.IllegalArgumentException: loadCaches must not return an empty Collection 
at org.springframework.util.Assert.notEmpty(Assert.java:268) 
at org.springframework.cache.support.AbstractCacheManager.afterPropertiesSet(AbstractCacheManager.java:49) 

私の第二の考えはキャッシュが(maxElementsInMemory 0など)に使用されないように、デフォルトのデータでnet.sf.ehcache.CacheManager.CacheManager()を設定することでした。しかし、キャッシュはまだ使用されていますが、これは私が望むものではありません。

プロパティーはnet.sf.ehcache.disabledですが、ehcacheも使用する休止状態のキャッシュを無効にしたくありません。

Qスプリング方式キャッシュを使用するにはすべてを設定できますが、外部設定ファイルからは無効にするにはどうすればよいですか?私は、アプリケーション・コンテキストやコードを変更してメソッド・キャッシュを有効/無効にしたくない。アプリケーションで使用する構成ファイルのみを変更できます。私が探していた何

+0

xmlによってspringキャッシング機能をどのように有効にしますか? Spring 3.1を使用していますか? – Ralph

+0

私はスプリングの3.1を注釈付きキャッシュで使用しています。http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.html – phury

答えて

8

NoOpCacheManagerた:

それを動作させるために、私はにXML豆の作成から切り替え次のように工場

は、私が何かをした:

@Bean 
public CacheManager cacheManager() { 
    final CacheManager cacheManager;   
    if (this.methodCacheManager != null) { 
     final EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager(); 
     ehCacheCacheManager.setCacheManager(this.methodCacheManager); 
     cacheManager = ehCacheCacheManager; 
    } else { 
     cacheManager = new NoOpCacheManager(); 
    } 

    return cacheManager; 
} 
3

あなたが有効(またはしない)し、spring profileを使用することができ、スプリング・キャッシング・サポート

<beans profile="withCache"> 
    <cache:annotation-driven /> 
</beans> 
+0

私はその解決策を試しました私はプログラムでキャッシュフラグをテストしてから、コンテキストをリフレッシュせずにキャッシュプロファイルを有効にすることはできません。 – phury

関連する問題