Ich möchte @Cacheable
Annotation für die Methode ohne Parameter haben. In diesem Fall verwende ich @Cacheable wie folgt
Wenn ich diese Methode aufruft, wird sie jedoch nicht ausgeführt und es wird eine Ausnahme wie unten
erhaltenorg.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.
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
:
Sie finden hier die Liste der SPEL-Ausdrücke, die Sie in Ihrem Schlüssel verwenden können.
Tags und Links spring ehcache spelevaluationexception