Есть ли шаблон в Spring, который позволяет использовать данные с удаленного сервера в нескольких службах, не запрашивая их много раз?

#java #spring #spring-mvc #design-patterns

#java #spring #spring-mvc #шаблоны проектирования

Вопрос:

Я пытаюсь создать конечные точки CRUD для объекта A. У этого объекта есть поле с коллекцией идентификаторов другого объекта B. Объект B находится на удаленном сервере.

Я хочу

  1. Подтвердите, что объекты B с переданными идентификаторами действительно существуют на удаленном сервере.
  2. Сохраните в локальной базе данных оба поля объектов B: id и name

имя объекта B может быть получено с удаленного сервера через конечную точку. И через эту конечную точку я могу проверить, что объекты B с переданными идентификаторами существуют на удаленном сервере.

В моем приложении я попытался разделить логику, поэтому есть один компонент Spring для проверки объекта B, а другой для сопоставления с представлением DTO объекта A с внутренним представлением.

И мне нужно вызвать удаленный сервер с одним и тем же запросом для обеих целей: для проверки существования и для сопоставления с идентификатором и именем объекта B.

У меня есть идея с кратковременным кэшем, но мне кажется странным использовать кеш для такой цели.

Другой способ — вызвать эту конечную точку в какой-либо вышестоящей службе и передать полученные данные валидатору и картографу, но при такой реализации вышестоящей службе необходимо знать эту внутреннюю информацию о валидаторе и картографе (что им нужна информация с удаленного сервера)

Есть ли другой способ сделать это с помощью spirng?

Спасибо!

Комментарии:

1. baeldung.com/spring-cache-tutorial

2. Почему кажется странным использовать кэширование? Хранение данных в памяти, чтобы избежать повторения дорогостоящих операций. Это классический случай, когда может помочь кэширование. Или вы можете разработать свой код, чтобы получать данные один раз за вызов. Я не знаю, о чем вы говорите о внутренних деталях validator и mapper, но код тоже может быть разработан должным образом.

3. Кэширование кажется мне странным, потому что эти данные необходимы только в контексте одного запроса. Да, вопрос как раз в этом, как разработать код, соответствующий описанным требованиям

4. Если данные используются только для одного запроса, то какая польза от кэширования? Кэш повышает производительность только тогда, когда кэшированные данные считываются несколько раз.

Ответ №1:

Я решил использовать кэш с областью запроса.

Вот пример, который я нашел: https://medium.com/@james.tran/memoize-part-1-request-level-cache-for-spring-applications-the-why-and-the-how-75877d8999ea