web-dev-qa-db-ja.com

Spring Bootでカフェインを使用して、キャッシュごとに異なる仕様を設定することは可能ですか?

スプリングブートを使用した簡単なスプリントブートアプリケーションがあります1.5.11.RELEASE with @EnableCachingアプリケーションConfigurationクラス。

pom.xml

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
 </dependency>
 <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>caffeine</artifactId>
 </dependency>

application.properties

spring.cache.type=caffeine
spring.cache.cache-names=cache-a,cache-b
spring.cache.caffeine.spec=maximumSize=100, expireAfterWrite=1d

質問

私の質問は簡単です。キャッシュごとに異なるサイズ/有効期限を指定するにはどうすればよいですか。例えば。おそらくcache-a1 day。だが cache-b1 week。カフェインキャッシュの仕様は、CacheManagerではなくCacheに対してグローバルであるように見えます。何か不足していますか?おそらく、私のユースケースに適したプロバイダーがありますか?

16
David

これが唯一のチャンスです。

@Bean
public CaffeineCache cacheA() {
    return new CaffeineCache("CACHE_A",
            Caffeine.newBuilder()
                    .expireAfterAccess(1, TimeUnit.DAYS)
                    .build());
}

@Bean
public CaffeineCache cacheB() {
    return new CaffeineCache("CACHE_B",
            Caffeine.newBuilder()
                    .expireAfterWrite(7, TimeUnit.DAYS)
                    .recordStats()
                    .build());
}

カスタムキャッシュをBeanとして公開するだけです。これらはCaffeineCacheManagerに自動的に追加されます。

9
membersound

初期PR を別の 小さなプロジェクト に変換しました。

使用を開始するには、Maven Centralから最新の依存関係を追加するだけです。

<dependency>
    <groupId>io.github.stepio.coffee-boots</groupId>
    <artifactId>coffee-boots</artifactId>
    <version>2.0.0</version>
</dependency>

プロパティの形式は次のとおりです。

coffee-boots.cache.spec.myCache=maximumSize=100000,expireAfterWrite=1m

特定の構成が定義されていない場合、CacheManagerはデフォルトでSpringの動作になります。

0
stepio