【问题标题】:call a static method on a parameter while using @CacheResult使用 @CacheResult 时对参数调用静态方法
【发布时间】:2018-11-02 14:54:57
【问题描述】:

我需要缓存调用 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);

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

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

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

【问题讨论】:

    标签: spring caching ehcache jcache jsr107


    【解决方案1】:

    @CacheResult 提供了一种方法来自定义生成的密钥,方法是定义一个密钥生成器类,如下所示:

    @CacheResult(cacheKeyGenerator = CustomKeyGenerator.class)
    public Result search(long id, String name, Date date); 
    

    不支持直接在注解中定义SpEL求值的key生成;相反,您必须提供自己的 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();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-02
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多