2017-12-19 4 views
1

Das folgende wird spring mitteilen, automatisch eine einfache ConcurrentHashMap mit dem Cache-Namen "simpleCache" zu generieren.Wie kann ein benutzerdefinierter @ Cache-Cache hinzugefügt werden, während die automatische Cache-Konfiguration beibehalten wird?

@Cachable("simpleCache") 
public String simpleCache(String val) { 
    //... 
} 

@Cache("selfexpire") 
public String selfexpireLookup(String val) { 

} 

Frage: Was ist, wenn ich nur einen Cache hinzugefügt werden soll, die eine definierte Selbstablaufzeit hat, wollen aber auf Federn autoconfigured Hashmaps für alle anderen @Cacheable ich vertrauen?

Die folgende erstellt den Cache:

@Bean 
public CaffeineCache selfexpireCache() { 
    return new CaffeineCache("selfexpire", 
      Caffeine.newBuilder() 
        .maximumSize(100) 
        .expireAfterAccess(1, TimeUnit.HOURS) 
        .build()); 
} 

ABER: whan ich jetzt meine Anwendung starten, alle anderen einmal autoconfigured Caches nicht mit:

java.lang.IllegalArgumentException: Cannot find cache named 'simpleCache' for Builder ... Nur der caffeing Cache explizit konfiguriert funktioniert.

Also, wie kann ich automatisch konfigurierte Caches beibehalten, während ich explizit einen benutzerdefinierten hinzufüge?

Natürlich konnte ich diese einfachen Caches manuell hinzufügen, aber ich würde es vorziehen, sie Frühling automatisch zu konfigurieren:

@Bean 
public ConcurrentMapCache simpleCache() { 
    return new ConcurrentMapCache("simpleCache"); 
} 

Antwort

1

Ich glaube, Sie verschiedene Arten von Caches durch Angabe eines expliziten org.springframework.cache.CacheManager verwenden können, die verwendet werden soll, :

@Cachable(value = "simpleCache", cacheManager="simpleCacheManager") 
public String getValueFromSimpleCache(String val) { 
    //... 
} 

nicht sicher, welcher Feder des Standard CacheManager ‚s Bean Name ist. Vielleicht müssen Sie es explizit deklarieren:

+0

Sie haben mich falsch verstanden: der selfexpireCache funktioniert wie erwartet und konfiguriert mit Koffein. Nur der normalerweise automatisch konfigurierte 'ConcurrentHashMap' Cache' somecache' wird nicht mehr initialisiert. Ich möchte Spring sagen, dass ich immer noch jene Caches initalisieren soll, die keinen Coffein Cache definiert haben. – membersound

+1

Ich habe meine Antwort basierend auf deinem Kommentar und den Änderungen umgeschrieben. – dpr

+0

@membersound suchst du noch eine andere Antwort? Welcher Aspekt dieser Antwort funktioniert nicht oder ist zu kompliziert? – dpr

Verwandte Themen