вызывать статический метод для параметра при использовании @CacheResult - PullRequest
0 голосов
/ 23 мая 2018

Мне нужно кэшировать результат метода, который вызывает веб-сервис.Подпись метода выглядит следующим образом:

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?

1 Ответ

0 голосов
/ 05 марта 2019

@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();
    }
...