Flux Concatenation不会返回

时间:2017-02-28 18:44:38

标签: mongodb spring-boot spring-data-mongodb reactive spring-webflux

我正在尝试Spring Boot 2.0,webflux和reactiv Mongo存储库。我有两种变体,首先删除然后将数据添加到集合中。在第一个变体中,线程阻塞直到删除完成,在第二个变体中,数据的添加被连接到删除。

变体A

@GetMapping("init")
public String init() {
    Random rand = new Random();
    Flux<Power> powers = Flux.range(0, 10000)
            .map(i -> new Power(i,
                    LocalDateTime.now().toEpochSecond(ZoneOffset.of("+1")),
                    rand.nextDouble()));
    powerRepository.deleteAll().block();
    powerRepository.save(powers).blockLast();
    return "ok";
}

变体B

@GetMapping("init")
public String init() {
    Random rand = new Random();
    Flux<Power> powers = Flux.range(0, 10000)
            .map(i -> new Power(i,
                    LocalDateTime.now().toEpochSecond(ZoneOffset.of("+1")),
                    rand.nextDouble()));
    powerRepository.deleteAll()
            .concatWith((v) -> powerRepository.save(powers)).blockLast();
    return "ok";
}

变体A返回,变体B不返回。有什么不同?组合两个存储库操作的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

链接使用.then调用,如果没有更好的。避免阻止调用,而是返回Mono.just(“ok”)。

public Mono<String> init() {
    return repo.deleteAll()
        .then(() -> repo.save(...))
        .then(() -> Mono.just("ok"));
}

使端点返回Mono。