I want to have @Cacheable annotation on method with no parameter. In that case, I use @Cacheable as follows
@Cacheable(value="usercache", key = "mykey")
public string sayHello(){
return "test"
}
However, when I call this method, it doesn't get executed and it get exception as below
org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field 'mykey' cannot be found on object of type 'org.springframework.cache.interceptor.CacheExpressionRootObject' - maybe not public?
Please suggest.
It seems that Spring doesn't allow you to provide a static text for the cache key in the
SPEL, and it doesn't include as default the name of the method on the key, so, you could be in a situation when two methods using the samecacheNameand without a key would potentially cache different results with the same key.The easiest workaround is to provide the name of the method as the key:
This would set
sayHelloas the key.If you really need a static key, you should define a static variable in the class, and use
#root.target:You can find here the list of SPEL expressions that you can use in your key.