You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中Google Sheets缓存失效问题排查求助

Spring Boot @Cacheable 缓存未生效的排查原因

针对你遇到的@Cacheable注解未生效、方法每次都被调用的问题,以下是常见的排查方向:

  • 内部方法调用绕过代理
    Spring缓存注解基于AOP代理实现,若getSpreadsheet是被同一个类中的其他方法直接调用(比如用this.getSpreadsheet(xxx)),而非通过Spring容器注入的Bean实例调用,AOP代理不会触发,缓存逻辑自然不执行。

  • 缓存键未匹配
    检查两次调用传入的spreadsheetId是否完全一致,包括大小写、空格、特殊字符等细微差异。如果参数值不同,会生成不同的缓存键,无法命中已有缓存。另外若spreadsheetId为null,默认键生成策略可能引发异常或无法正确缓存,需确保参数传递正确。

  • 缓存实现或配置问题
    spring-boot-starter-cache仅提供缓存基础框架,默认用内存型ConcurrentMapCacheManager。但如果项目中有自定义CacheManager配置,且未初始化名为spreadsheet的缓存实例,缓存将无法工作。可检查自定义CacheManager是否包含该缓存名称。

  • 代理模式不兼容
    Spring默认AOP代理分JDK动态代理(针对接口)和CGLIB代理(针对类)。若GoogleSheetsService未实现接口,且项目配置了spring.aop.proxy-target-class=false(强制JDK代理),则无法生成有效代理,缓存注解失效。可在配置文件中设置spring.aop.proxy-target-class=true强制使用CGLIB代理。

  • 缓存被主动清空或过期
    排查是否有其他代码调用了缓存清空逻辑(如@CacheEvict注解、CacheManager.getCache("spreadsheet").clear()),或配置了极短的缓存过期时间,导致缓存每次调用时都已失效。

优先排查内部调用和缓存键匹配这两个高频问题,比如确认调用getSpreadsheet的代码是通过Spring容器注入的GoogleSheetsService实例,而非直接new对象或内部this调用。

内容的提问来源于stack exchange,提问作者Dennis Wong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:45:42