通量串联不 return
Flux Concatenation does not return
我正在试验 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 returns,变体 B 不是。有什么不同?合并两个存储库操作的正确方法是什么?
链使用 .then 调用,如果没有更好的话。避免块调用,而是 return Mono.just("ok")。
public Mono<String> init() {
return repo.deleteAll()
.then(() -> repo.save(...))
.then(() -> Mono.just("ok"));
}
使端点 return 单声道。
我正在试验 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 returns,变体 B 不是。有什么不同?合并两个存储库操作的正确方法是什么?
链使用 .then 调用,如果没有更好的话。避免块调用,而是 return Mono.just("ok")。
public Mono<String> init() {
return repo.deleteAll()
.then(() -> repo.save(...))
.then(() -> Mono.just("ok"));
}
使端点 return 单声道。