Можно ли установить другую спецификацию на кеш, используя кофеин весенней загрузки?

У меня есть простое загрузочное приложение 1.5.11.RELEASE с использованием 1.5.11.RELEASE Boot 1.5.11.RELEASE с @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-a чтобы быть действительным в течение 1 day. Но cache-b может быть в порядке в течение 1 week. Спецификация кеша кофеина, по-видимому, является глобальной для CacheManager а не для Cache. Я что-то пропустил? Возможно, есть более подходящий провайдер для моего использования?

Ответ 1

Это ваш единственный шанс:

@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());
}

Просто выставьте свои пользовательские кэши в виде бобов. Они автоматически добавляются в CaffeineCacheManager.

Ответ 2

Я превратил свой первоначальный пиар в отдельный крошечный проект.

Чтобы начать использовать его, просто добавьте последнюю зависимость от 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.