要么改变世界,要么适应世界

Spring Boot @Cacheable 失效的解决方法

2020-07-31 19:00:00
167
目录

文章参考了博客园的 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是不起作用的 ,因此需要将这两个方法放到不同的类中。

历史评论
开始评论