私はSpring Caching Abstractionを使用してSpring MVCアプリケーションに取り組んでいます。キャッシュの実装はバージョン2.6.5のEhCacheですスプリングキャッシング - 異なるスコープのキャッシュを管理する方法は?
ここでは、いくつかのメソッドの結果がWebセッションに基づいているため、1つのアプリケーションスコープと別のセッションスコープが必要です。これを達成する最良の方法は何ですか?
私は、SpringがCacheManagerを挿入しようとしたときにセッションが利用できない可能性があるので、グローバルキャッシュと同じCacheManagerにセッションキャッシュを登録できないと考えました。したがって、私はセッションスコープで別のCacheManager ...
@Bean
public net.sf.ehcache.Cache sessionCache() {
return new net.sf.ehcache.Cache(sessionCacheConfiguration());
}
@Bean
@Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS)
public CacheManager sessionCacheManager(){
net.sf.ehcache.CacheManager sessionCacheManager = net.sf.ehcache.CacheManager.create();
sessionCacheManager.setName("sessionCacheManager");
sessionCacheManager.addCache(sessionCache());
return new EhCacheCacheManager(sessionCacheManager);
}
@Bean
public CacheManager globalCacheManager() {
return new EhCacheCacheManager(ehCacheCacheManager().getObject());
}
@Bean
public EhCacheManagerFactoryBean ehCacheCacheManager() {
EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean();
cmfb.setConfigLocation(new ClassPathResource("ehcache.xml"));
cmfb.setShared(true);
return cmfb;
}
@Bean
public CompositeCacheManager cacheManager(){
return new CompositeCacheManager(globalCacheManager(), sessionCacheManager()){{
setFallbackToNoOpCache(true);
}};
}
は、残念ながら、これは正しく動作しませんを持って、春は一度だけsessionCacheManagerを作成します。だから私はすべてのセッションでキャッシュされた結果を得る。
これらのキャッシュとキャッシュマネージャの使用場所に関する情報を追加できますか?あなたのCompositeCacheManagerが問題を引き起こしていると思います。 –
私は自分のサービスメソッドで '@Cacheable(" sessionCache ")'と '@Cacheable(" globalCache ")'を使用します。 CompositeCacheManagerは魅力的に機能し、複数のCacheManagersを処理できます。 –