Spring Boot整合Caffeine缓存不生效,相同参数仍执行原方法如何解决?
Caffeine缓存不生效的常见原因及解决方案
你贴出的依赖、缓存管理器配置本身没有语法错误,问题基本都出在Spring缓存注解的AOP代理生效条件上,按优先级检查以下几点:
- 检查业务类是否被Spring容器托管
你贴出的MyClass代码上没有标注@Service/@Component等Spring托管注解,如果类没有被Spring纳入容器管理,框架不会对类中的缓存注解做任何增强处理,自然不会走缓存逻辑。 - 检查是否是类内部方法调用
Spring缓存基于动态代理实现,只有从类外部通过注入的Bean实例调用@Cacheable标注的方法,才会走代理的缓存逻辑。如果你是在MyClass内部的其他方法中直接通过this.cacheableMethod()的方式调用,会绕过代理,注解直接失效。
解决方法:注入自身实例后调用,或者把被缓存的方法拆分到单独的托管类中。 - 确认缓存方法的访问修饰符符合要求
@Cacheable标注的方法必须是public权限,private/protected/default权限的方法上的缓存注解会被Spring直接忽略。 - 确认CacheManager Bean优先级
如果项目中存在多个CacheManager类型的Bean,需要给你自定义的Caffeine CacheManager Bean加上@Primary注解,确保缓存逻辑优先使用该配置:@Bean @Primary public CacheManager cacheManager() { CaffeineCacheManager cacheManager = new CaffeineCacheManager(CACHE_NAME); cacheManager.setCaffeine(caffeineConfig()); return cacheManager; } - 额外注意配置项含义
你当前配置的maximumSize(1024 * 1024 * 256)指的是缓存的最大条目数量,不是占用的内存字节数,该配置最多允许存储2亿+条缓存数据,如果你本意是限制内存占用,需要改用maximumWeight配合weigher实现。
内容的提问来源于stack exchange,提问作者dhalfageme
相关产品推荐
相关产品推荐

