Spring Cache使用@CacheEvict按固定key驱逐缓存报错如何解决?
Spring Cache @CacheEvict 驱逐固定key失败问题修复
问题原因
Spring Cache 注解的key属性默认会以SpEL(Spring 表达式语言)规则解析,你在@CacheEvict中直接填写key = "getAllToday"时,Spring会将其识别为变量名,尝试从缓存表达式上下文根对象CacheExpressionRootObject中查找名为getAllToday的属性,而不是将其直接作为固定字符串key使用,因此抛出属性找不到的异常。
修复方案
如果要指定固定字符串作为缓存key,需要给字符串添加单引号,标记为SpEL字符串字面量,修改后的注解配置如下:
@Caching( evict = { @CacheEvict(cacheNames = "dishDTOs", key = "'getAllToday'"), @CacheEvict(cacheNames = "dishDTOs", key = "#dishId") })
修改后getAllToday会被直接识别为key值,和@Cacheable生成的缓存key完全匹配,即可正常完成缓存驱逐。
内容的提问来源于stack exchange,提问作者user16613329
相关产品推荐
相关产品推荐

