web-dev-qa-db-ja.com

SpringCaffeineCacheManagerに追加された複数のカフェインLoadingCaches

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?
10
Steve

はい、可能です。すべてのキャッシュを微調整する必要があるため、おそらく自分でキャッシュを定義する方が得意です。例に戻ると、次のステップは次のようになります。

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は別のプロバイダーからのキャッシュである可能性があります。

15
Stephane Nicoll