SpringCache 设置key时如何添加常量?
问题描述
使用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 中。
@Servicepublic class Current {
private static ThreadLocal<String> threadLocal = new ThreadLocal<>();
public void setCurrentId() {
threadLocal.set(BaseContext.getCurrentId());
}
public static String getCurrentId() {
return threadLocal.get();
}
}
使用时加上注解@Cacheable(value = "ShoppingCar",key = "@current.getCurrentId()")
使用 key 时,加上 @
符号,就能告诉 spring boot 利用 name 获取 bean。
方法二
将 currentId
传入方法作为参数,利用 spring boot 自带的 {#currentId, '_car'}
表达式,加上后缀。
@Cacheable(value = "mainFieldInfo", key = "{#currentId, '_car'}") public void test(String currentId) {
}
以上是 SpringCache 设置key时如何添加常量? 的全部内容, 来源链接: utcz.com/p/944702.html