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

Han*_*ket 9 java spring-data spring-boot

例如,在使用时,MongoRepository有一些方法我想标记@Cacheableinsert(entity)findOne(id).既然它是一个Spring存储库而不是我的存储库,我应该如何使用@Cacheable这些方法呢?

kry*_*ger 7

不确定你实际上是如何使用的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);
}
Run Code Online (Sandbox Code Playgroud)

(请注意,它基于我在其中一条评论中包含的官方示例)