解决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 配置不起作用