解决springboot中@ehcache不起作用的问题
SpringBoot 解决 EhCache 不起作用 问题
2023-09-27 14:22:13 时间
一 问题描述
问题描述前,请允许我,吐槽一下,这个问题困扰了一天,下面在业务层下的代码中,@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),就执行了一次查询数据库,后面都是从缓存中直接取得的结果。
二 案例2
2.1 业务层
2.2 javabean
2.3 调试
2.4 调试
相关文章
- SpringBoot使用Session
- java SpringBoot注解@Async不生效的解决方法
- SpringBoot中使用@Async注解使用及其失效问题解决
- 基础springboot扫描讲解
- SpringBoot读取resources下的文件以及resources的资源路径
- SpringBoot注解总结
- Spring Boot-intellij idea导入方式搭建SpringBoot
- springboot学习笔记(含源代码+视频链接)
- Java学习-085-Springboot 解决 InetAddress.getLocalHost().getHostName() took 13387 milliseconds to respond. Please verify your network configuration
- Windows下IDEA run能运行springboot,java -jar maven打的包拉有中文的nacos配置,报org.yaml.snakeyaml.error.YAMLException错误解决
- SpringBoot入门九(整合之通用mapper)
- SpringBoot整合支付宝支付流程及ISV权限不足的解决
- springboot-集成MySQL+druid+mybatis-plus总结
- springboot+vue在线答疑系统(源码+说明文档)
- SpringBoot解决跨域
- 分布式之---springboot+Dubbo+zookeeper
- 【问题解决】SpringBoot工程无法找到父依赖 parent-pom Failure to find com.xxx:parent-pom:pom:1.0.0.RELEASE
- springboot 中spring-data-redis报错:远程主机强迫关闭了一个现有的连接,如何解决?
- SpringBoot之集成通用Mapper
- SpringBoot配置Cors解决跨域请求问题