解决springboot中@ehcache不起作用的问题

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决springboot中@ehcache不起作用的问题相关的知识,希望对你有一定的参考价值。

一 问题描述

问题描述前,请允许我,吐槽一下,这个问题困扰了一天,下面在业务层下的代码中,@cache注解标注了value的名称,但是没有设置key,且传递的参数为

CrawlRecordParamVo crawlRecordParamVo ,是一个对象,每次调用都要查询一次数据库,没有启动缓存的作用

原因在于没有制定key,因为:对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回,否则才会执行此方法从数据库中拿到,并将返回结果存入指定的缓存中。

二 解决办法

1.思想:将对象bean中查询的属性字段,通过md5加密生成一个字符串,作为一个唯一的主键,如在下图对象bean中定义uuid

2.将对象中作为查询条件的字段,通过md5加密:这样保证本次,以及上次的查询条件没有修改的话,这些查询条件生成的md5字符串是一样,也就是key是一样,则直接从缓存中拿到数据,否则查询条件有改动,如查询日期改了,则这些查询条件生成的md5串也就发生改变,这时候的key就是新key,就会重新查询数据库,进行返回并将结果缓存到缓存中。

3.在缓存的注解标注的方法上,设置   CrawlRecordParamVo对象中uuid主键

4.测试

通过页面调用,查询看到console显示:第一次查询了数据库,将结果存入缓存中,后面多次点击查询,走到controller后,直接从缓存中拿到数据。不再执行service层的

public Map<String,Object> exportCrawlRecordInfoList(CrawlRecordParamVo crawlRecordParamVo) 

这个方法了。

修改一下pageSize的值,再次查询

通过控制台日志看到:修改pagesize之后(12变为10),就执行了一次查询数据库,后面都是从缓存中直接取得的结果。

以上是关于解决springboot中@ehcache不起作用的问题的主要内容,如果未能解决你的问题,请参考以下文章

解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

ControllerAdvice 的异常处理程序在使用 Spring Boot 的 Rest API 获取请求中不起作用。如何解决?

Angular2+、SpringBoot 2.1.9、Keycloak:CORS 配置不起作用

springboot项目idea代码报红,maven clean, maven reimport都不起作用

SpringBoot异步任务及Async不起作用的原因

Spring Boot - 事务管理不起作用