如何在不阻塞的情况下从Flux获取列表?

时间:2019-04-19 18:48:05

标签: java spring-boot reactive-programming spring-webflux

我有一个存储库,该存储库返回一个通量,并希望将结果设置为另一个需要列表的对象。还有其他方法可以将结果作为列表而不阻塞吗?

该块正在工作,但需要很长时间。

public class FluxToListTest {

    @Autowired PostRepository postRepository;

    public void setUserPosts(User user) {
      user.setPostList(postRepository.findAllByOrderId(user.getId()).collectList().block());
  }
}


interface PostRepository {

    Flux<Post> findAllByOrderId(final UUID userId);
}


@Data
class User {
  UUID id;
  List<Post> postList;
}


class Post {
    UUID id;
    String content;
}

1 个答案:

答案 0 :(得分:0)

简而言之-。 您无需从List中提取Flux。 如果您已开始使用Reactor Streams,请继续使用它。

尝试以下代码:

public void setUserPosts(User user) {
    postRepository.findAllByOrderId(user.getId())
        .collectList()
        .doOnNext(user::setPostList)// (1)
        .subscribe();               // (2) 
}  
  1. 如果您将操作设置为阻塞,请使用publishOn / subscribeOn来避免阻塞所有流。
  2. 它开始您的流表演