Вызывать статический метод для параметра при использовании @CacheResult
Мне нужно кэшировать результат метода, который вызывает веб-сервис. Подпись метода выглядит так:
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
?
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();
}