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

时间:2015-06-21 11:59:05

标签: java spring-boot spring-data

例如,MongoRepository使用时,我希望将某些方法标记为@Cacheable,例如insert(entity)findOne(id)。 既然它是一个Spring存储库而不是我的存储库,我应该如何在这些方法上使用@Cacheable

2 个答案:

答案 0 :(得分:7)

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

  

(...)此接口主要用作标记接口,用于捕获要使用的类型,并帮助您发现扩展此接口的接口。 (...)

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

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

答案 1 :(得分:1)

其中一个选项可能是在xml中执行,如docs中所述。

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

相关问题