Как использовать @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.

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