🦔
Spring CacheとCaffeineで複数のCacheMangagerを利用する
環境
- Spring Boot: 2.7.4
- Kotlin: 1.6.21
- Gradle
キャッシュにはCaffeineを使用する
準備
以下の2つを追加する
dependencies {
implementation("org.springframework.boot:spring-boot-starter-cache")
implementation("com.github.ben-manes.caffeine:caffeine")
}
CacheManagerの定義
CachingConfigurerSupportを継承したクラスを用意し、そこにCacheManagerを定義する
CacheConfig.kt
@Configuration(proxyBeanMethods = false)
@EnableCaching
class CacheConfig: CachingConfigurerSupport() {
@Bean
override fun cacheManager(): CacheManager = CaffeineCacheManager().apply {
setCaffeine(Caffeine.newBuilder().expireAfterWrite(2, TimeUnit.SECONDS))
}
@Bean
fun fooCacheManager(): CacheManager =
// fooはキャッシュ名
CaffeineCacheManager("foo").apply {
setCaffeine(Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.SECONDS))
}
}
CacheManagerを指定したキャッシュ設定
@Cacheable#cacheManagerにCacheManager名を指定する
@Cacheable(cacheNames = ["foo"], cacheManager = "fooCacheManager")
fun getFoo(foo: String): Foo {...}
CacheManagerを指定しないキャッシュ設定
@Cacheable#cacheManagerを未設定にすればOK
未指定の場合、CacheConfig#cacheManagerに定義したCacheManegerが利用される
@Cacheable(cacheNames = ["bar"])
fun getBar(bar: String): Bar {...}
Discussion