如何在 Spring Boot 应用程序的同一方法上使用 @CachePut 和 @CacheEvict?
How to use @CachePut and @CacheEvict on the same method in a Spring Boot application?
我正在开发一个 Spring 引导应用程序,我有一个场景可以将 @CachePut
和 @CacheEvict
放在同一个方法上。
我用下面给出的代码尝试了这个场景:
@CachePut(value="myValue",key="#entity.getId(),#entity.getOrgId()",
cacheManager="no-expire-caching")
@CacheEvict(value="myValue", key="#entity.getId(),#entity.getOrgId()",
cacheManager="no-expire-caching", condition="#entity.isDeleted() == true")
public MyEntity save(boolean flag, MyEntity entity){
if (flag==true){
entity.setIsDeleted(true);
return myRepo.save(entity);
}
return myRepo.save(entity);
}
但这似乎没有按预期工作。
目标:
我希望 @CachePut
注释始终首先执行,因为这将是更新缓存的第一个验证。
@CacheEvict
每当满足条件时执行(即 isDeleted
字段设置为 true
)
如果 isDeleted
设置为 true
,我不想更新缓存或添加新条目。
是否可以在 Spring 中实现?我应该如何修改我的代码?
您可以在 Spring 中使用 @Caching
注释在同一方法上实现多个不同缓存注释的使用。
注意:这适用于使用不同的缓存。
根据Spring Cache Abstraction Docs:
When multiple annotations such as @CacheEvict
or
@CachePut
is needed to be specified on the same method for different caches.
Then to achieve this, the workaround is to use @Caching
.
@Caching
allows multiple nested @Cacheable
, @CachePut
and @CacheEvict
to be used on the same method.
试试这个(如果有效的话):
@Caching(put={@CachePut(value="myValue",key="#entity.getId(),#entity.getOrgId()",
cacheManager="no-expire-caching")}, evict = {@CacheEvict(value="myValue", key="#entity.getId(),#entity.getOrgId()",
cacheManager="no-expire-caching", condition="#entity.isDeleted() == true")})
public MyEntity save(boolean flag, MyEntity entity){
if (flag==true){
entity.setIsDeleted(true);
return myRepo.save(entity);
}
return myRepo.save(entity);
}
我正在开发一个 Spring 引导应用程序,我有一个场景可以将 @CachePut
和 @CacheEvict
放在同一个方法上。
我用下面给出的代码尝试了这个场景:
@CachePut(value="myValue",key="#entity.getId(),#entity.getOrgId()",
cacheManager="no-expire-caching")
@CacheEvict(value="myValue", key="#entity.getId(),#entity.getOrgId()",
cacheManager="no-expire-caching", condition="#entity.isDeleted() == true")
public MyEntity save(boolean flag, MyEntity entity){
if (flag==true){
entity.setIsDeleted(true);
return myRepo.save(entity);
}
return myRepo.save(entity);
}
但这似乎没有按预期工作。
目标:
我希望
@CachePut
注释始终首先执行,因为这将是更新缓存的第一个验证。@CacheEvict
每当满足条件时执行(即isDeleted
字段设置为true
)如果
isDeleted
设置为true
,我不想更新缓存或添加新条目。
是否可以在 Spring 中实现?我应该如何修改我的代码?
您可以在 Spring 中使用 @Caching
注释在同一方法上实现多个不同缓存注释的使用。
注意:这适用于使用不同的缓存。
根据Spring Cache Abstraction Docs:
When multiple annotations such as
@CacheEvict
or@CachePut
is needed to be specified on the same method for different caches.
Then to achieve this, the workaround is to use
@Caching
.@Caching
allows multiple nested@Cacheable
,@CachePut
and@CacheEvict
to be used on the same method.
试试这个(如果有效的话):
@Caching(put={@CachePut(value="myValue",key="#entity.getId(),#entity.getOrgId()",
cacheManager="no-expire-caching")}, evict = {@CacheEvict(value="myValue", key="#entity.getId(),#entity.getOrgId()",
cacheManager="no-expire-caching", condition="#entity.isDeleted() == true")})
public MyEntity save(boolean flag, MyEntity entity){
if (flag==true){
entity.setIsDeleted(true);
return myRepo.save(entity);
}
return myRepo.save(entity);
}