spring-data-jpa - Spring Data Rest with Cache
问题描述
我正在学习Spring Data Rest,但我没有找到如何在 Spring Data Rest 中使用Cache。如何将缓存与Spring Data Rest 的 curd/page一起使用。或者我应该使用JPA+Cache并忽略Spring Data Rest?
如果我误解了什么,请提醒我。
最良好的问候
解决方案
您可以尝试以下方法:
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();
}
}
推荐阅读
- sql - 如何在 SQL 中没有任何相互列或值的情况下将一整列从表复制到另一列?
- json - Flutter:将 JSON 数据发送到 API 获取错误:NoSuchMethodError:Class 'List
' 没有实例方法 'toMap' - python - Python,如何使用 map 函数运行 2 个或多个具有不同值的函数?
- erlang - Erlang主管默默无法启动
- django - 如何检查并查看输出是否包含任何列表中的所需元素?
- python - Selenium“元素不可交互异常”在谷歌表单上使用sendkeys?
- python - 在 python 3.7 中创建虚拟环境失败
- python - Python RAT 中的多客户端
- sql-server - 使用 Access 和 SQL Server 高效存储图像
- java - 如何构建一个在拉伸时显示更多按钮的 android 小部件?