SpringCache中如何解决@Cacheable注解Key值必须为常量的限制?

心靈之曲

心靈之曲

2025-02-20

1091人浏览

原创

springcache中如何解决@cacheable注解key值必须为常量的限制?

Spring Cache 中动态 Key 的处理方法

在使用 Spring Cache 的 @Cacheable 注解时,常常需要根据动态参数生成缓存 Key。直接使用动态参数会导致 "attribute value must be constant" 错误,因为 @Cacheablekey 属性值必须是常量表达式。本文介绍两种解决方法:

方法一:利用 Spring Bean 获取动态值

度加AI
度加AI

度加AI官网入口,百度官方 AIGC 创作平台,支持 AI 成片、AI 生文、数字人、声音克隆、配音字幕与智能剪辑等在线创作能力。

下载
  1. 创建一个 Spring Bean 用于存储和获取动态值:
<code class="java">@Service
public class CurrentUserService {
    private static final ThreadLocal<string> userIdThreadLocal = new ThreadLocal();

    public void setUserId(String userId) {
        userIdThreadLocal.set(userId);
    }

    public String getUserId() {
        return userIdThreadLocal.get();
    }
}</string></code>
  1. @Cacheable 注解中使用 SpEL 表达式引用 Bean 方法:
<code class="java">@Cacheable(value = "shoppingCar", key = "#currentUserService.getUserId() + '_car'")
public Object getShoppingCarData() {
    // ... your logic ...
}</code>

方法二:使用 SpEL 表达式直接处理方法参数

  1. 将动态值作为方法参数传入:
<code class="java">@Cacheable(value = "mainFieldInfo", key = "{#currentId, '_car'}")
public Object getMainFieldInfo(String currentId) {
    // ... your logic ...
}</code>
  1. @Cacheable 注解的 key 属性中,使用 SpEL 表达式 {#currentId, '_car'} 直接拼接 Key。#currentId 代表方法参数 currentId 的值。

这两种方法都能有效解决 @Cacheable 注解 key 值必须为常量的限制,允许根据动态参数生成不同的缓存 Key,从而实现更灵活的缓存策略。 选择哪种方法取决于具体场景和代码结构,方法二更简洁直接,但方法一在某些复杂场景下可能更易于管理。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

1153

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

194

25

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

3266

49

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

10

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

8

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

10

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

5

10

火山引擎域名备案流程详解
火山引擎域名备案流程详解

火山引擎域名备案适合需要在火山引擎云服务器、对象存储、CDN或网站服务上绑定域名的用户参考。本专题整理备案入口、账号实名认证、备案类型选择、主体信息填写、网站信息提交、资料上传、初审核验、管局审核和备案失败排查,帮助用户完成网站上线前的备案流程。

2026.08.04

1

10

火山引擎DNS解析配置步骤
火山引擎DNS解析配置步骤

使用火山引擎DNS解析网站域名时,需要确认域名已完成管理接入,并正确配置服务器IP、CNAME地址或验证记录。本专题整理域名添加、记录类型选择、TTL设置、解析状态检查、备案和访问测试等流程,适合新手搭建网站时参考。

2026.08.04

3

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程