我正在学习 Spring Data Rest ,但是我没有找到如何在Spring Data Rest中使用 Cache 。 如何将缓存与 Spring Data Rest的凝乳/页面结合使用。 还是应该使用 JPA + Cache 并忽略 Spring Data Rest ?
如果我误解了什么,请提醒我。
最诚挚的问候
答案 0 :(得分:0)
您可以尝试以下方法:
1)覆盖您的存储库方法findById
和findAll
,使其成为Cacheable
:
public interface MyEntityRepo extends JpaRepository<MyEntity, Long> {
@Cacheable("myEntities")
@Override
Optional<MyEntity> findById(Long id);
@Cacheable("pagedMyEntities")
@Override
Page<MyEntity> findAll(Pageable pageable);
}
2)创建一个RepositoryEventHandler来驱逐您的缓存:
@RepositoryEventHandler
public class MyEntityEventHandler {
private final CacheManager cacheManager;
public MyEntityEventHandler(CacheManager cacheManager) {
this.cacheManager = cacheManager;
}
@HandleAfterCreate
@HandleAfterSave
@HandleAfterDelete
public void handleCachesEviction(MyEntity entity) {
Optional.ofNullable(cacheManager.getCache("myEntities"))
.ifPresent(c -> c.evict(entity.getId()));
Optional.ofNullable(cacheManager.getCache("pagedMyEntities"))
.ifPresent(c -> c.clear());
}
}
3)当然,创建一个缓存管理器bean,例如:
@EnableCaching
@SpringBootApplication
public class Application {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager();
}
}