Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @cacheexecute的动态参数_Java_Spring_Annotations_Ehcache - Fatal编程技术网

Java @cacheexecute的动态参数

Java @cacheexecute的动态参数,java,spring,annotations,ehcache,Java,Spring,Annotations,Ehcache,我正在我的项目中实现EHcache,我已经编写了一个方法,可以从缓存中删除所有条目。该方法工作正常,下面是代码片段: public void removeEntriesFromCache(String cacheName){ CacheManager.getInstance.getCache(cacheName).removeAll(); } 我最终将把这个方法公开为一个rest服务,这样用户就可以调用该服务以及需要失效的缓存名。但是,我希望能够使用@cacheexecute执行同样

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

 public void removeEntriesFromCache(String cacheName){
    CacheManager.getInstance.getCache(cacheName).removeAll();
}
我最终将把这个方法公开为一个rest服务,这样用户就可以调用该服务以及需要失效的缓存名。但是,我希望能够使用@cacheexecute执行同样的操作。我知道我能做到:

 @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){

}
欢迎你的建议

谢谢

文档清楚地说明了在哪里可以使用SpEl。您不能在name属性中使用SpEl,但可以将
CacheManager
注入到您现在正在注释的bean中,按名称获取
Cache
并清除它


cacheManager.getCache(cacheName).clear()

您说得对,文档清楚地说明了我们可以在哪里使用SpEI。我发布这个问题是为了知道还有其他方法可以实现这一点。请查看
CacheAspectSupport
,在那里您可以看到整个评估过程
ProcessCache退出相关部分。更改此方法需要相当多的编码,但您可以在注释中指定自己的
CacheResolver
,从中可以访问方法参数并解析要逐出的缓存。希望这能让你更接近解决这个问题。