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 中。

@Service

public 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

回到顶部