春季反应堆加入2单声道

时间:2018-10-16 10:48:46

标签: spring-boot project-reactor reactor

我需要使用Spring Reactor以反应方式连接到数据库。 这是我想获取的场景->

  1. 1。连接到数据库并获得响应1

    2。然后连接到数据库并获得response2,同时提供response1.parameter

    1. 将这两个加入单个响应中,然后以String的形式发送回用户

由于所有对象都是唯一的,因此我计划使用Mono

Mono<Response1> r1 = qrepo.findByID(id)
Mono<Response2> r2 = qrepo.findByID(r1.getParam())

Mono<String> combined = Mono.when(r1, r2).map(t -> { 
            StringBuffer sb = new StringBuffer();
                sb.append(r1.getProp1());
                sb.append(r2.getProp2());

但这对我来说并不重要

2 个答案:

答案 0 :(得分:4)

您应该获取response1,然后将其结果flatMap到访问参数,并将其传递到存储库,然后将结果映射到字符串

    Mono<String> resultMono = qrepo.findByID(id)
            .flatMap(response1 -> qrepo.findByID(response1.getParam())
                    .map(response2 -> {
                        StringBuilder sb = new StringBuilder();
                        sb.append(response1.getProp1());
                        sb.append(response2.getProp2());
                        return sb.toString();
                    }));

答案 1 :(得分:0)

使用Mono.zip

示例:

Mono.zip(Mono.just("hello"), Mono.just("world")).map(tuple2 -> {

      return tuple2.getT1() + tuple2.getT2();
    });

Mono.zip将给定的Monos聚合到一个新的Mono中,当所有给定的Monos都产生一个商品时,该新的Mono将实现。