【发布时间】:2021-01-13 23:12:49
【问题描述】:
我们在我们的项目中添加了spring-boot-starter-cache,并且没有使用任何特定的缓存提供程序实现。我们正在通过调用以下方法在应用程序启动期间加载所有数据:
@Override
@Cacheable(cacheNames = "foos")
public List<FooDto> getAllFoo() {
return fooRepository.findAll().stream()
.map(FooEntityDomainToDtoMapper::mapDomainToDto) // mapping entity to dto
.collect(Collectors.toList());
}
//Want to implement something like:
public FooDto getFoo(Long id) {
//return single object from foos(which are cached in above method)
}
它将所有foos 存储在缓存中。正如预期的那样,下次我们调用getAllFoo 时,它是从缓存中返回而不是从数据库中返回。现在下次当用户通过 id 请求单个对象时,我们希望从这个已经缓存的 foos 数据中返回它,而不是调用 JPA 的 findById()。有什么方法可以实现吗?
【问题讨论】:
-
可以直接访问CacheManager。对您来说问题是您需要自动装配它,而您不能在接口中这样做,因为对于 JPA,Spring 正在运行时生成 repo 实现。因此,您需要一些委托给 @Repository 的包装器组件,您可以在其中自动装配缓存管理器,并在必要时跳过 JPA 调用
标签: java spring spring-boot caching spring-cache