springboot canche 无法避免Null key错误, Null key returned for cache operation

bash 复制代码
2025-12-25 14:32:08.245 [http-nio-8080-exec-2] ERROR c.c.f.a.common.exception.ArchExceptionHandler - Null key returned for cache operation (maybe you are using named params on classes without debug info?) Builder[public java.lang.String com.software.framework.arch.appliation.AbstarctSystemApplication.getAllCompanyById(java.lang.String)] caches=[arch-base_getAllCompanyById_] | key='#p0' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='#p0!=null||#p0!=''' | unless='#result=='未查询到组织信息'||#result == null ' | sync='false'
java.lang.IllegalArgumentException: Null key returned for cache operation (maybe you are using named params on classes without debug info?) Builder[public java.lang.String com.software.framework.arch.appliation.AbstarctSystemApplication.getAllCompanyById(java.lang.String)] caches=[arch-base_getAllCompanyById_] | key='#p0' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='#p0!=null||#p0!=''' | unless='#result=='未查询到组织信息'||#result == null ' | sync='false'
	at org.springframework.cache.interceptor.CacheAspectSupport.generateKey(CacheAspectSupport.java:578)
	at org.springframework.cache.interceptor.CacheAspectSupport.findCachedItem(CacheAspectSupport.java:518)
	at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:401)
	at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:345)
	at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)

springboot canche 无法避免Null key

md,真的还有人在2025年还用springboot 2.3.0吗??

springboot 2.3.0 版本的陈旧bug

在 Spring Framework < 5.3.0(即 Spring Boot < 2.4.0)中:

condition 表达式是在 key 生成之后才被评估的!

这与官方文档描述和开发者预期 完全相反!

也就是说,即使你写了:

java 复制代码
@Cacheable(key = "#p0", condition = "#p0 != null")

Spring 2.3.0 的执行顺序仍然是:

先解析 key = "#p0" → 如果 p0 == null,得到 null

立即抛出 Null key returned 异常

❌ 根本不会去检查 condition!

📌 这是一个 设计/实现 bug,在后续版本中被修复。

相关推荐
Fatbobman(东坡肘子)6 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
揽星河..6 小时前
【C语言】底层程序设计
c语言·开发语言
JavaPub-rodert6 小时前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
海的透彻7 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat8 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
北京中科新远科技8 小时前
高速交换机端口预算怎么做?下行、上联、拆分和冗余计算框架
开发语言·php
xiaoye-duck8 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
后台模板学习8 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one8 小时前
算法--构造
java·数据结构·算法
SL_staff9 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈