@Cacheble Annotation auf keine Parametermethode

8

Ich möchte @Cacheable Annotation für die Methode ohne Parameter haben. In diesem Fall verwende ich @Cacheable wie folgt

%Vor%

Wenn ich diese Methode aufruft, wird sie jedoch nicht ausgeführt und es wird eine Ausnahme wie unten

erhalten
  

org.springframework.expression.spsel.SpelEvaluationException: EL1008E: (Pos 0): Eigenschaft oder Feld 'mykey' kann nicht auf Objekt des Typs 'org.springframework.cache.interceptor.CacheExpressionRootObject' gefunden werden - möglicherweise nicht öffentlich?

Bitte schlagen Sie vor.

    
user3534483 28.10.2015, 05:13
quelle

3 Antworten

17

Es scheint, dass Spring es nicht erlaubt, einen statischen Text für den Cacheschlüssel in SPEL bereitzustellen, und der Name der Methode für den Schlüssel ist nicht standardmäßig enthalten. Sie könnten also darin sein Eine Situation, in der zwei Methoden, die das gleiche cacheName und ohne einen Schlüssel verwenden, möglicherweise unterschiedliche Ergebnisse mit demselben Schlüssel zwischenspeichern.

Die einfachste Problemumgehung besteht darin, den Namen der Methode als Schlüssel anzugeben:

%Vor%

Dies würde sayHello als Schlüssel festlegen.

Wenn Sie wirklich einen statischen Schlüssel benötigen, sollten Sie eine statische Variable in der Klasse definieren und #root.target :

verwenden %Vor%

Sie finden hier die Liste der SPEL-Ausdrücke, die Sie in Ihrem Schlüssel verwenden können.

    
Ruben 28.10.2015, 06:29
quelle
4

Fügen Sie einfache Anführungszeichen um mykey hinzu. Es ist ein SPEL-Ausdruck und die Singles-Zitate machen es wieder zu einem String .

%Vor%     
Cliff 17.11.2017 00:46
quelle
0

Fügen Sie # in den Schlüssel

ein %Vor%     
giggs 20.12.2017 07:47
quelle