2017-12-20 7 views
0

Ich benutze Spring-Framework und Haselnuss-Cache, um REST-APi im Service-Layer zwischenzuspeichern. Die API, die ich cache, hat @Cacheable Annotation mit Cachename und Keygenerator, die gut funktioniert. Ich bin auf der Suche nach der besten Möglichkeit zum Aktivieren/Deaktivieren des Caching mit Anwendungseigenschaft oder Consul-Eigenschaft. Dafür versuche ich, die Eigenschaft im Condition-Attribut @Cachable Annotation zu übergeben, funktioniert aber nicht. Mit diesem Ansatz werde ich den gleichen Wert an mehreren Stellen übergeben (wo auch immer ich auf API-Ebene cache). Gibt es einen guten Weg, mit solchen Operationen umzugehen? Als Beispiel ist hier ein Code-SchnipselSpring framework + Hazelcast, wie Cache mit @Cacheable Annotation aktivieren/deaktivieren

@Cacheable(cacheNames = CacheName.MyCache1,keyGenerator = "customKeyGen") 
public CachingObject myFirstAPI(String param1, String param2) { 
} 

Hier wird der Cache Hazelcast customKeyGen verwenden und legen Wert (CachingObject) von myFirstAPI zurückgegeben. Wenn ich diese Operation deaktivieren muss, besteht meine aktuelle Vorgehensweise darin, einen Wert (gelesen von der Anwendungseigenschaft) als Bedingung zu übergeben, damit das Flag/condition vor dem Erstellen des Caches bewertet wird und der Wert nur dann zwischengespeichert wird, wenn die Bedingung wahr ist, dh Cache aktiviert ist. z.B

@Cacheable(cacheNames = CacheName.MyCache1,keyGenerator = "customKeyGen", condition="${enableCache}") 
public CachingObject myFirstAPI(String param1, String param2) { 
} 

In meinem Fall der Ausdruck Sprache, die ich in Bedingung wirft Ausnahme bin vorbei, die ich herausfinden, warum (es derzeit SpelEvaluationException, Objekt oder Feld ‚EnableCache‘ wirft nicht auf Objekt vom Typ ‚org gefunden werden. springframework.cache.interceptor.CacheExpressionRootObject ')

Meine Frage ist, ist dies die richtige Weise zu aktivieren/deaktivieren Caching? Bitte vorschlagen.

Antwort

Verwandte Themen