mysol做的选课网站,公司名称大全两个字,网站空间申请开通,wordpress预定插件Spring全家桶中CacheEvict无效情况共有以下几种 一、背景介绍二、原因分析三、解决方案 一、背景介绍
SpringBoot中使用Cacheable注解缓存数据#xff0c;使用CacheEvict注解删除缓存。但是在项目使用过程中#xff0c;发现使用CacheEvict注解删除缓存无效。
拓展#xff… Spring全家桶中CacheEvict无效情况共有以下几种 一、背景介绍二、原因分析三、解决方案 一、背景介绍
SpringBoot中使用Cacheable注解缓存数据使用CacheEvict注解删除缓存。但是在项目使用过程中发现使用CacheEvict注解删除缓存无效。
拓展CacheEvict 就是一个触发器在每次调用被它注解的方法时就会触发删除它指定的缓存的动作。跟 Cacheable 和 CachePut 一样CacheEvict 也要求指定一个或多个缓存也指定自定义的缓存解析器和 key 生成器也支持指定条件condition 参数。 CacheEvict 是用来清除缓存的有以下属性 value缓存位置名称不能为空。 key缓存的key默认为空。 condition触发条件只有满足条件的情况才会清除缓存默认为空支持SpEL。 allEntriestrue表示清除value中的全部缓存默认为false。 二、原因分析
经过网络搜索与总结Spring全家桶中CacheEvict无效的原因有以下几种情况
1、使用CacheEvict注解的方法必须是Controller层直接调用Service里间接调用不生效。我本次出现无效的原因2、key值跟你查询方法的key值不统一所以导致缓存并没有清除。3、把CacheEvict的方法和Cacheable的方法放到一个java文件中写如果这两个注解在两个java文件的话会导致CacheEvict失效。4、返回值必须设置为void才会生效。网络上有很多同学有返回值的使用CacheEvict这个注解也是无效的。
CacheEvict annotation It is important to note that void methods can be used with CacheEvict
5、CacheEvict必须作用在走代理的方法上。同原因1。
在使用Spring CacheEvict注解的时候要注意如果类A的方法function1()被标注了 CacheEvict注解那么当类A的其他方法例如function2()去直接调用function1()的时候 CacheEvict是不起作用的原因是 CacheEvict是基于Spring AOP代理类function2()属于内部方法直接调用function1()时是不走代理的。
CacheEvict不生效的代码示例如下
三、解决方案
知道原因之后就知道怎么解决了由于以上有几种原因针对每种原因的解决方案不同各自对应解决即可。
以下为本文中出现问题的解决方案 本文完结