Mono.defer()とは何か
Keywords
- Spring WebFlux
Contents
- 1. Mono.defer()とは
- 2. 参考URL
Mono.defer()とは
Mono.defer()とは、Subscribeするたびに生産者を生成するようにするメソッドです。
下記のコードを実行すると、標準出力は、
just
1612021350619: reactor-http-nio-2 1612021350618
1612021351630: reactor-http-nio-2 1612021350618
defer
1612021351631: reactor-http-nio-2 1612021351631
1612021352636: reactor-http-nio-2 1612021352636
のようになります。Mono.justを使った場合は、同じミリ秒を出力しているのに対し、Mono.deferを使った場合は、別のミリ秒を出力しています。
@GetMapping("/defer-test")
public Mono<String> defer() throws InterruptedException {
// just
System.out.println("just");
Mono<Long> hotPublisher = Mono.just(System.currentTimeMillis());
hotPublisher.subscribe(SampleController::printWithThread);
Thread.sleep(1000L);
hotPublisher.subscribe(SampleController::printWithThread);
// defer
System.out.println("defer");
Mono<Long> coldPublisher = Mono.defer(()->{
return Mono.just(System.currentTimeMillis());
});
coldPublisher.subscribe(SampleController::printWithThread);
Thread.sleep(1000L);
coldPublisher.subscribe(SampleController::printWithThread);
return Mono.just("Hello, World");
}
参考URL
https://github.com/ale51/webflux-sample/commit/d54b4c3fa4254a9c777226f00d8cd65fb763cd87