0

我需要缓存调用 web 服务的方法的结果。方法签名是这样的:

public Result search(long id, String name, Date date);

结果取决于所有参数

我为缓存创建了 ehcache 配置myCache,通常要使用此缓存,我应该使用@CacheResult注释:

@CacheResult(cacheName = "myCache")
public Result search(long id, String name, Date date);

但在我的情况下,我需要在参数上调用静态方法,我想以与注释date相同的方式执行此操作:@Cacheable

@Cacheable(value = "myCache", key ="{#id, #name, T(my.static).method(#date)}")
public Result search(long id, String name, Date date);

我的问题是如何在使用时对参数调用静态方法 @CacheResult

4

1 回答 1

0

@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();
    }
于 2019-03-05T14:30:08.323 回答