@CacheEvict(value =“test”, allEntries = true)
1、使用@CacheEvict注解的方法必须是controller层直接调用,service里间接调用不生效。
2、原因是因为key值跟你查询方法的key值不统一,所以导致缓存并没有清除
3、把@CacheEvict的方法和@Cache的方法放到一个java文件中写,他俩在两个java文件的话,会导致@CacheEvict失效。
4、返回值必须设置为void
@CacheEvict annotation
It is important to note that void methods can be used with @CacheEvict
5、@CacheEvict必须作用在走代理的方法上
在使用Spring @CacheEvict注解的时候,要注意,如果类A的方法f1()被标注了 @CacheEvict注解,那么当类A的其他方法,例如:f2(),去直接调用f1()的时候, @CacheEvict是不起作用的,原因是 @CacheEvict是基于Spring AOP代理类,f2()属于内部方法,直接调用f1()时,是不走代理的。
举个例子:
不生效:
@Override
public void saveEntity(Menu menu) {
try {
mapper.insert(menu);
//Cacheable 不生效
this.test();
}catch(Exception e){
e.printStackTrace();
}
}
@CacheEvict(value = "test" , allEntries = true)
public void test() {
}
正确使用:
@Override
@CacheEvict(value = "test" , allEntries = true)
public void saveEntity(Menu menu) {
try {
mapper.insert(menu);
}catch(Exception e){
e.printStackTrace();
}
}
版权声明:本文为qq_36326332原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。