6

ehcache とアノテーション駆動型の構成でスプリング メソッド キャッシングを構成しました。

ただし、アプリケーションで使用する構成ファイルから無効にできるようにしたいと思います。

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)

私の 2 番目のアイデアはnet.sf.ehcache.CacheManager.CacheManager()、キャッシュが使用されないように (maxElementsInMemory 0 など)、既定のデータを使用して構成することでした。しかし、キャッシュはまだ使用されていますが、これは私が望んでいるものではありません。

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

Qスプリング メソッド キャッシュを使用するようにすべてを構成し、外部構成ファイルから無効にするにはどうすればよいですか? メソッド キャッシングを有効/無効にするために、アプリケーション コンテキストもコードも変更したくありません。アプリケーションで使用する構成ファイルのみを変更できます。

4

2 に答える 2

8

私が探していたのはNoOpCacheManager

それを機能させるために、xml Bean の作成からファクトリに切り替えました

私は次のようなことをしました:

@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;
}
于 2013-01-17T16:01:25.490 に答える
3

スプリング プロファイルを使用して、スプリング キャッシング サポートを有効にする (または無効にする)ことができます。

<beans profile="withCache">
   <cache:annotation-driven />
</beans>
于 2013-01-15T13:29:59.633 に答える