在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
转换为 LIMIT
和 OFFSET
来对查询应用分页。
引用文献:
关于spring-data - 如何在响应式 Spring Data 中应用分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46384618/