Nik*_*hil 5 java reactive-programming project-reactor
我仍然是Java Reactive Programming的新手,我的项目需求要求我在Java中实现Pactive with Reactive Programming.
就像我点击一个在流中返回10000条记录的API一样,我需要返回一个具有适当分页的通量.
有谁能建议我这方面的好方法?
像这样是我遵循的方法.
知识库
public interface CouchBaseRepository extends ReactiveCouchBaseRepository<Book,Integer> {
@Query("#{#n1ql.selectEntity} where name=$1")
public Flux<Book> getPaginatedFlux(String name ,final Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
这是我的Repositorty,但当我启动我的应用程序时,它显示以下错误.
java.lang.IllegalStateException: Method has to have one of the following return types! [interface org.springframework.data.domain.Page, interface org.springframework.data.domain.Slice, interface java.util.List]
Run Code Online (Sandbox Code Playgroud)
我不能在这里使用Page inteface,因为它是阻塞所以有什么方法可以解决这个问题吗?
我还没有使用过spring-webflux,所以我无法对特定的API调用发表评论,但我会提供一个可能有帮助的"理论"答案.
Flux代表数据流(可能是无限的).因此,分页与反应性不一致,只是因为它们谈论的是不同的东西
考虑使用输入参数(如通常的限制/偏移)实现分页,该方法根据您的要求返回(逻辑决定的)Flux最多10000条记录.
因此,一个呼叫将以"被动方式"处理,但如果您要加载另一个页面,它将只返回一页数据 - 执行另一个被动呼叫.
当然,在流级别,收到10000个对象后,应该关闭流.这是我建议的方法.
还有另一种选择:通过一个流实现所有内容,但在这种情况下,客户端(UI或消耗分页数据的任何内容)必须"足够智能"才能加载/卸载所需的数据.换句话说,如果你有一百万个对象要显示,那就想想你是否应该避免在客户端同时加载所有100万个对象的情况.
此外,页面导航将是一种棘手的东西(如下一页/上一页).我之前没有这样做过.我认为底线,选择将是需求驱动.