Spring LoadingCache
にいくつかの異なるCacheManager
を追加しようとしていますが、CaffeineCacheManager
を使用してこれがどのように可能かわかりません。コンテンツの更新に使用できるローダーは1つだけのようですが、キャッシュごとに個別のローダーが必要です。 Springキャッシュマネージャーに複数のロードキャッシュを追加することは可能ですか?もしそうなら、どのように?
CaffeineCacheManager cacheManage = new CaffeineCacheManager();
LoadingCache<String, Optional<Edition>> loadingCache1 =
Caffeine.newBuilder()
.maximumSize(150)
.refreshAfterWrite(5, TimeUnit.MINUTES)
.build(test -> this.testRepo.find(test));
LoadingCache<String, Optional<Edition>> loadingCache2 =
Caffeine.newBuilder()
.maximumSize(150)
.refreshAfterWrite(5, TimeUnit.MINUTES)
.build(test2 -> this.testRepo.find2(test2));
// How do I add to cache manager, and specify a name?
はい、可能です。すべてのキャッシュを微調整する必要があるため、おそらく自分でキャッシュを定義する方が得意です。例に戻ると、次のステップは次のようになります。
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(Arrays.asList(
new CaffeineCache("first", loadingCache1),
new CaffeineCache("second", loadingCache2)));
そして、それをいつものように使うことができます。
@Cacheable("first")
public Foo load(String id) { ... }
Spring Bootを使用している場合は、個々のキャッシュをBeanとして公開できます(したがって、org.springframework.cache.Cache
実装)、それらを検出し、SimpleCacheManager
を自動的に作成します。
この戦略では、さまざまな実装でキャッシュの抽象化を使用できることに注意してください。 first
はカフェインキャッシュであり、second
は別のプロバイダーからのキャッシュである可能性があります。