spring-data - 如何在响应式 Spring Data 中应用分页?

标签 spring-data reactive-programming spring-data-mongodb

在Spring Data中,我们有PagingAndSortingRepository,它继承自CrudRepository。在响应式 Spring Data 中,我们只有 ReactiveSortingRepository 继承自 ReactiveCrudRepository。 我们如何以响应式方式进行分页? 例如,我们将来可以使用 ReactivePagingAndSortingRepository 来实现这一点吗?

最佳答案

响应式 Spring Data MongoDB 存储库不提供为命令式存储库设计的分页意义上的分页。命令式分页在获取页面时需要额外的详细信息。特别是:

  • 分页查询返回的记录数
  • (可选)如果返回的记录数为零或与页面大小匹配以计算总页数,则查询生成的记录总数

这两个方面都不符合高效、非阻塞资源使用的概念。等到收到所有记录(以确定分页详细信息的第一 block )将消除您通过响应式(Reactive)数据访问获得的大部分好处。此外,执行计数查询的成本相当高,并且会增加您能够处理数据之前的延迟。

您仍然可以通过将 Pageable (PageRequest) 传递给存储库查询方法来自行获取数据 block :

interface ReactivePersonRepository extends Repository<Person, Long> {

  Flux<Person> findByFirstnameOrderByLastname(String firstname, Pageable pageable);
}

Spring Data 将通过将 Pageable 转换为 LIMITOFFSET 来对查询应用分页。

引用文献:

关于spring-data - 如何在响应式 Spring Data 中应用分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46384618/

相关文章:

java - Thymeleaf 没有看到来自 Controller 的引用

spring-boot - 如何在 Spring Boot 版本中查找 spring 项目的版本

java - 如何序列化属性但不使用 spring 数据持久化它?

javascript - 如何观察对象的方法返回的属性变化

iOS Combine Framework - Publisher 只发布一次,然后再也不会发布

java - 如何从外部实用程序 jar 正确加载和配置 Spring bean

mongodb - Spring Data MongoDB BigDecimal 支持

java - Hibernate 实体类映射到两个不同的表

java - Spring WebFlux : How to access Request Body in HandlerFilterFunction

mongodb - spring data mongodb _id 映射首选项