我正在项目中实现EHcache,并且编写了一种方法,该方法将从缓存中删除所有条目。该方法可以正常工作,下面是代码片段:

 public void removeEntriesFromCache(String cacheName){
    CacheManager.getInstance.getCache(cacheName).removeAll();
}

我最终将把此方法公开为rest服务,以便用户可以调用该服务以及需要无效的缓存名称。但是,我希望能够使用@CacheEvict执行相同的操作。我知道我可以这样做:
 @CacheEvict(name ="myCache" , allEntries=true)
public void removeEntriesFromCache(){

}

但是,此方法将仅从一个缓存中删除条目,在这种情况下,它将从“myCache”中删除所有缓存条目。我希望能够根据用户指定的运行时动态地解析缓存名称。

是否有可能实现以下目标:
@CacheEvict(name ="${cacheName}" , allEntries=true)
public void removeEntriesFromCache(String cacheName){

}


@CacheEvict(name ="#cacheName" , allEntries=true)
public void removeEntriesFromCache(String cacheName){

}

您的建议将受到欢迎。

谢谢

最佳答案

@CacheEvict文档明确说明了可以在何处使用SpEl。您不能在name属性中使用SpEl,但是可以将CacheManager注入到现在要注释的bean中,按名称获取Cache并清除它。
cacheManager.getCache(cacheName).clear()

10-05 23:28