Как использовать @Cacheable в репозиториях данных spring
при использовании, например, MongoRepository
есть некоторые методы, которые я хотел бы отметить как @Cacheable
например insert(entity)
или findOne(id)
.
Поскольку это репозиторий Spring, а не мой, как я должен использовать @Cacheable
об этих методах?
2 ответов
не уверен, как вы на самом деле используете MongoRepository
, вы, кажется, предполагаете, что используете его напрямую (часто рекомендуется включать свой код в вопрос), но справочная документация объясняет основы работы с этим интерфейсом (и все интерфейсы репозитория в Spring Data, по сути):"§ 6.1. Основные понятия":
(...) этот интерфейс действует главным образом как интерфейс отметки для того чтобы захватить типы к работа с интерфейсами, расширяющими этот интерфейс, и помощь в их обнаружении. (...)
ваш пользовательский репозиторий будет чем-то вроде:
public interface SomeTypeMongoRepository extends MongoRepository<SomeType, Long> {
@Override
@CacheEvict("someCache")
<S extends SomeType> S insert(S entity);
@Override
@Cacheable("someCache")
SomeType findOne(Long id);
}
(заметим, что он основан на официальный пример Я включил в один из моих комментариев)
одним из вариантов может быть сделать это в XML, как описано в docs.
Другим преимуществом этого подхода является то, что вы можете сделать несколько методов кэшируемыми с помощью одного объявления.