Spring 使用@CacheResult时对参数调用静态方法
我需要缓存调用Web服务的方法的结果。 方法签名如下所示:Spring 使用@CacheResult时对参数调用静态方法,spring,caching,ehcache,jcache,jsr107,Spring,Caching,Ehcache,Jcache,Jsr107,我需要缓存调用Web服务的方法的结果。 方法签名如下所示: public Result search(long id, String name, Date date); 结果取决于所有参数 我为缓存myCache创建了ehcache配置,通常要使用此缓存,我应该使用@CacheResult注释: @CacheResult(cacheName = "myCache") public Result search(long id, String name, Date date); @Cacheab
public Result search(long id, String name, Date date);
结果取决于所有参数
我为缓存myCache
创建了ehcache配置,通常要使用此缓存,我应该使用@CacheResult
注释:
@CacheResult(cacheName = "myCache")
public Result search(long id, String name, Date date);
@Cacheable(value = "myCache", key ="{#id, #name, T(my.static).method(#date)}")
public Result search(long id, String name, Date date);
但是在我的例子中,我需要对date
参数调用一个静态方法,我希望使用与@Cacheable
注释相同的方法:
@CacheResult(cacheName = "myCache")
public Result search(long id, String name, Date date);
@Cacheable(value = "myCache", key ="{#id, #name, T(my.static).method(#date)}")
public Result search(long id, String name, Date date);
我的问题是,在使用
@CacheResult
时,如何对参数调用静态方法?@CacheResult
提供了一种通过定义密钥生成器类自定义生成密钥的方法,如下所示:
@CacheResult(cacheKeyGenerator = CustomKeyGenerator.class)
public Result search(long id, String name, Date date);
它不支持直接在注释中根据SpEL评估定义密钥生成;相反,您必须提供自己的javax.cache.annotation.CacheKeyGenerator实现:
public class CustomKeyGenerator implements CacheKeyGenerator {
@Override
public GeneratedCacheKey generateCacheKey(CacheKeyInvocationContext<? extends Annotation> cacheKeyInvocationContext) {
CacheInvocationParameter[] parameters = cacheKeyInvocationContext.getKeyParameters();
// calculate a key based on parameters
return new SearchKey();
}
公共类CustomKeyGenerator实现CacheKeyGenerator{
@凌驾
公共生成的CacheKey generateCacheKey(CacheKeyInvocationContext