2017-01-31 10 views
2

Используя пружинную загрузку и механизм кэширования, можно ли автоматически сохранять все объекты, возвращаемые в виде коллекции в кеш по одному?Ввод всех возвращенных элементов в кеш-память Spring-Boot с помощью аннотаций

Например картина следующий Repository метод:

@Query("...") 
List<Foo> findFooByBar(Bar bar); 

Я хотел бы, чтобы вставить их в Spring Cache, один за другим, а это означает, что будет N вставки (по одному для каждого элемента в списке) а не только один (весь список).

Пример:

@Query("...") 
@CachePut(value = "foos", key = "result.each.id") 
List<Foo> findFooByBar(Bar bar); 
+0

Я вошел вопрос в JIRA стержневые, потому что с первого взгляда на исходный код в 'CacheAspectSupport' кажется, что это невозможно. https://jira.spring.io/browse/SPR-15213 –

ответ

1

Некоторое время назад, другой человек задавал подобный/связанные question on SO и я дала ответ вместе с example.

Как вы знаете, по умолчанию из-за Весна не обрабатывает несколько ключей/значений так, как вы предполагали, хотя мне нравится ваше мышление здесь и ваш пример/UC.

Часто, однако, вы можете добиться того, что хотите, используя промежуточное решение с небольшим количеством дополнительной работы. Весна является отличным примером Open/Closed principle, а 2 первичных абстракции в Spring's Cache Abstraction - это интерфейсы Cache и CacheManager.

Как правило, вы можете выбрать существующую реализацию и «адаптировать» либо Cache, либо CacheManager, или и то и другое, как это было сделано мной в моем example.

Хотя не так идеально или удобно, мы надеемся, что это даст вам некоторые идеи, пока не будет рассмотрен SPR-15213 (хотя maybe not).

Cheers, Джон

+0

Спасибо, Джон, вы дали мне отличные идеи для работы. –