Как кэшировать HTTP-запросы, сделанные с помощью библиотеки Feign Netflix, в приложении Java Spring

Есть ли простой способ кэшировать и автоматически возвращать эти кэшированные значения в приложении с весенней загрузкой, использующем Netflix Feign для выполнения HTTP-запросов к службе? Кеш должен быть основан на параметрах, переданных в запрос (аналогично запоминанию функции на X минут).

Я ищу что-то вроде аннотации @Cache ниже:

@Component
@FeignClient(value = "facebook", url = "${auth.facebook.url}")
public interface FacebookClient {
    @Cache(600) // Something like this.
    @RequestMapping(method = RequestMethod.GET, value = "/debug_token?input_token={input_token}&access_token={access_token}")
    Map debugToken(@PathVariable("input_token") String inputToken, @PathVariable("access_token") String appToken);
}

Конечно, я мог бы кэшировать это сам, используя декоратор вокруг FacebookClient, мне было интересно, есть ли способ быстрее / меньше кода.


person Alejandro    schedule 30.04.2016    source источник


Ответы (3)


Пружины @Cacheable делают то, что вам нужно.

Проверьте: Кэширование данных с помощью Spring

person Stefan Isele - prefabware.com    schedule 01.05.2016
comment
Спасибо за отзыв. Для других, кто может прочитать это, я нашел эти полезные: 1 2 - person Alejandro; 06.05.2016

Feign не поддерживает кеширование. Я бы предпочел JCache (JSR-107) и, возможно, использовать его через spring-boot-starter-cache, описанный в руководстве по Spring

JCache - это абстракция проприетарной реализации EhCache, Hazelcast, ... так что можно изменить реализацию с очень меньшим влиянием на приложение. Сначала я бы предпочел EhCache 3.

person Tobsch    schedule 07.03.2017
comment
Есть ли официальная информация о симуляции, не поддерживающей аннотации @Cache? - person Bianca; 04.04.2018

Имитация клиента не поддерживает кеширование.

Еще один лучший способ - создать класс Service, который вызывает FeignClient и помещает в кеш методы этого нового класса Service.

person Dhruv Saksena    schedule 03.06.2019