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

Spring Boot默认缓存未生效,@Cacheable标注方法每次都被执行

Spring Boot @Cacheable缓存不生效问题排查及解决方案

核心问题原因

  • 测试类依赖注入方式错误
    你当前使用@InjectMocks注入的ExportService是Mockito直接实例化的普通对象,没有被Spring的AOP代理包裹。@Cacheable的缓存逻辑基于Spring AOP切面实现,只有通过Spring容器获取的代理对象调用对应方法,才会触发缓存拦截,直接调用原始类实例的方法会跳过所有AOP逻辑,因此每次都会执行完整的方法体。
  • 测试类未加载Spring上下文,缓存配置未生效
    标注在测试类上的@EnableCaching需要配合Spring上下文才能生效,你当前的测试类没有启动Spring容器,缓存相关的切面、缓存管理器都没有初始化,缓存配置完全不生效。

修复方案

将测试类改为Spring Boot测试模式,通过Spring容器注入ExportService实例,示例代码如下:

@SpringBootTest // 加载Spring Boot上下文
@EnableCaching
public class ExportServiceTest{

    @Autowired // 从Spring容器注入代理后的实例
    private ExportService myService;

    @Test
    public void translateSuccess(){
        String value = myService.translate("KEY", "en");
        myService.translate("KEY", "en");
        myService.translate("KEY", "en");
   }
}

如果不需要加载全量Spring上下文,可以指定加载的类减少启动耗时:
@SpringBootTest(classes = {ExportService.class})

补充校验点

确认项目的application配置文件中没有禁用默认缓存,默认情况下引入spring-boot-starter-cache后,Spring会自动使用基于ConcurrentHashMap的简单缓存实现,不需要额外配置即可生效。

内容的提问来源于stack exchange,提问作者Serban Uciu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:06:02