web-dev-qa-db-fra.com

Est-il possible de définir une spécification différente par mémoire cache en utilisant de la caféine au printemps?

J'ai une application de démarrage de sprint simple en utilisant un démarrage à ressort 1.5.11.RELEASE avec @EnableCaching dans la classe Application 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

Question

Ma question est simple: comment peut-on spécifier une taille/expiration différente par cache? Par exemple. Peut-être qu'il est acceptable que cache-a soit valide pour 1 day. Mais cache-b pourrait être correct pour 1 week. La spécification sur un cache de caféine semble être globale pour CacheManager plutôt que Cache. Est-ce que je manque quelque chose? Peut-être existe-t-il un fournisseur plus adapté à mon cas d'utilisation?

7
David Goate

Ceci est votre seule chance:

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

Exposez simplement vos caches personnalisées sous forme de haricots. Ils sont automatiquement ajoutés à la CaffeineCacheManager.

1
membersound