问题描述
使用redis缓存数据时取名需要根据后台session得到id,从而对不同用户取不同的缓存名
问题出现的环境背景及自己尝试过哪些方法
查了很多搜索引擎,都基本是那几篇的描述,不奏效
相关代码
//BaseContext.getCurrentId()是为了获取前端传来的id
public static final String DIY_ID = String.valueOf(BaseContext.getCurrentId());
//在对某个方法使用缓存时,缓存名需要根据传来的id取,但这样写编译不通过:Attribute value must be constant
@Cacheable(value = "ShoppingCar",key = DIY_ID+"'_car'")
你期待的结果是什么?实际看到的错误信息又是什么?
错误消息:Attribute value must be constant
期待大佬们给点建议对于key赋值时添加常量
方法一
将
BaseContext.getCurrentId()
的值放在一个 bean 中。使用时加上注解
@Cacheable(value = "ShoppingCar",key = "@current.getCurrentId()")
使用 key 时,加上
@
符号,就能告诉 spring boot 利用 name 获取 bean。方法二
将
currentId
传入方法作为参数,利用 spring boot 自带的{#currentId, '_car'}
表达式,加上后缀。