Spring Boot @Cacheable 失效的解决方法
目录
文章参考了博客园的 zhaoyue1215 用户分享的文章【Spring @Cacheable 缓存不生效的问题】
今天在使用Spring Boot
的缓存时候,发现控制台一直输出Hibernate
访问数据库时执行的Sql
语句,@EnableCaching
注解已经添加到主启动类中, @Cacheable
也加到了相应的服务方法上,但是我把断点打到了ConcurrentMapCacheManager
类中的方法getCache(String name)
上后,测试过程发现根本就没有调用该方法,即缓存不生效!
解决办法
后来查阅资料发现,如果注解都正确添加,缓存不生效的可能是因为被添加@Cacheable
的方法是在内部被其他方法,这样子是无法使用缓存的,例如说我这次情况:
/**
* 将数据库中的Blog对象取出来,将其属性content(MarkDown语法)转为HTML格式
*/
public Blog getAndConvert(Long id) {
Blog blog = getBlog(id)
//
//
//
//
//
//
return blog;
}
@Cacheble()
public Blog getBlog(Long id) {
//
//
//
//
//
//
return blog;
}
因为 @Cacheable
是基于Spring AOP
代理类,内部方法调用是不走代理的,@Cacheable
是不起作用的 ,因此需要将这两个方法放到不同的类中。
本文由「黄阿信」创作,创作不易,请多支持。
如果您觉得本文写得不错,那就点一下「赞赏」请我喝杯咖啡~
商业转载请联系作者获得授权,非商业转载请附上原文出处及本链接。
关注公众号,获取最新动态!
历史评论
开始评论