我应该如何在 spring 数据存储库上使用 @Cacheable

How should I use @Cacheable on spring data repositories

例如,当使用 MongoRepository 时,有些方法我想标记为 @Cacheable,例如 insert(entity)findOne(id)。 由于它是一个 Spring 存储库而不是我的,我应该如何在这些方法上使用 @Cacheable

其中一种选择是在 xml 中执行此操作,如 docs 中所述。

这种方法的另一个好处是您可以使用单个声明使多个方法可缓存。

不确定您实际是如何使用的MongoRepository,您似乎在暗示您直接使用它(将您的代码包含在问题中通常是个好主意),但参考文档解释了使用此接口(以及 Spring 数据中的所有存储库接口,事实上)的基础知识:"§ 6.1. Core concepts":

(...) This interface acts primarily as a marker interface to capture the types to work with and to help you to discover interfaces that extend this one. (...)

您的自定义存储库类似于:

public interface SomeTypeMongoRepository extends MongoRepository<SomeType, Long> {
    @Override
    @CacheEvict("someCache")
    <S extends SomeType> S insert(S entity);

    @Override
    @Cacheable("someCache")
    SomeType findOne(Long id);
}

(请注意,它基于我在其中一条评论中包含的 official example