我应该如何在 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)
例如,当使用 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)