2017-09-23 100 views
1

在Spring Data中,我們有PagingAndSortingRepository,它繼承自CrudRepository。在反應性彈簧數據中,我們只有 ReactiveSortingRepository,它繼承自ReactiveCrudRepository。 我們如何以被動方式進行分頁? 例如,我們能否在未來以ReactivePagingAndSortingRepository做到這一點?在響應式Spring數據中如何應用分頁?

+0

什麼是你想要的使用情況來解決?它是批量數據處理(逐頁)還是隻想獲取特定數據塊? – mp911de

+0

第二點。我只想通過對數據進行分頁並且不一次全部檢索所有的web服務 – Steph

回答

2

反應式Spring數據MongoDB存儲庫不提供分頁意義上的分頁方式,它是如何爲命令式存儲庫設計的。命令式分頁在獲取頁面時需要額外的細節。特別是:

  • 返回記錄的分頁查詢
  • 可選,記錄的查詢產量總計數,如果返回的記錄數爲零或相匹配的頁面大小來計算的頁面總數的數字

這兩個方面都不符合有效的非阻塞資源使用的概念。等待直到收到所有記錄(以確定第一個分頁詳細信息塊)將會消除您通過被動數據訪問獲得的很大部分好處。此外,執行計數查詢相當昂貴,並且會增加滯後時間,直到您能夠處理數據。

,您仍然可以通過傳遞一個PageablePageRequest)到存儲庫查詢方法獲取數據自己大塊:

interface ReactivePersonRepository extends Repository<Person, Long> { 

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

春天的數據將通過翻譯向PageableLIMIT適用OFFSET分頁到查詢。

參考文獻:

+0

如何用您的示例回顧左頁?在非反應性風格中,存儲庫提供包含信息的類型。在Flux的示例中,頁面信息不可用。 – zennon

+0

相似的問題:https://stackoverflow.com/questions/44478189/how-can-i-return-a-fluxorder-when-my-response-is-wrapped-in-a-json-pagination – zennon

+0

你需要獲得計數並從那裏計算剩餘的頁面。 – mp911de