@cacheable@cacheevict无效
我有这样的服务:
@service
pubic class TestService {
@Cacheable(cacheNames ="user",key = "#userId")
public User fetchUserById(Long userid) {
return new User();
}
public User fetchCurrentUser() {
return fetchUserById(124L);
}
}
有一些问题: @Cacheable
当我调用 fetchUserById(Long userid)
.
但是 @Cacheable
无效,当我调用 fetchCurrentUser()
.
1条答案
按热度按时间rqmkfv5c1#
您可以在这里找到解决方案:当从同一个类中调用spring cache@cacheable方法时忽略它
这是因为spring中为处理缓存和事务相关功能而创建代理的方式。这是spring如何处理事务、缓存和aop的一个非常好的参考:了解spring中的代理使用
简言之,一个自调用绕过了动态代理,而作为动态代理逻辑一部分的任何交叉关注点(如缓存、事务等)也被绕过。
解决方法是使用aspectj编译时或加载时编织。