Más contenido relacionado
La actualidad más candente (20)
Similar a 今こそ知りたいSpring Web(Spring Fest 2020講演資料) (20)
Más de NTT DATA Technology & Innovation (20)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
- 1. © 2020 NTT DATA Corporation
今こそ知りたいSpring Web
Spring Fest 2020 2020/12/17
株式会社NTTデータ 伊藤司
- 2. © 2020 NTT DATA Corporation 2
自己紹介
@Bean
SelfIntroduction selfIntroduction() {
return SelfIntroduction.builder()
.name("伊藤", "司")
.company("株式会社NTTデータ")
.role("アーキテクト")
.work("一般企業向けのシステム開発")
.work("フレームワークの技術検証")
.work("コンテナ・k8sの技術検証")
.hobby("ガンプラ")
.build();
}
- 3. © 2020 NTT DATA Corporation 3
はじめに
• 本セッションで話すこと
• Springの2つのWebアプリケーションフレームワークの特徴・違い
• Spring MVCの基本的な処理の流れ
• Spring WebFluxの基本的な処理の流れ
• 本セッションで出てくるサンプルコードはGitHubで公開しています
• https://github.com/itoutki/introduction-to-spring-web
- 4. © 2020 NTT DATA Corporation 4
目次
1. 今こそ知りたいSpringのWebアプリケーションフレームワーク
2. 今こそ知りたいSpring MVC
3. 今こそ知りたいSpring WebFlux
4. まとめ
- 5. © 2020 NTT DATA Corporation
今こそ知りたいSpringの
Webアプリケーションフレームワーク
5
- 6. © 2020 NTT DATA Corporation 6
Webアプリケーションとフレームワーク
アプリケーションサーバ
Webアプリケーション
HTTP
リクエスト
Webアプリケーション
フレームワーク
HTML
アプリケーションサーバ
Webアプリケーション
HTTP
リクエスト
Webアプリケーション
フレームワーク
JSON
など
画面アプリケーション APIアプリケーション
- 7. © 2020 NTT DATA Corporation 7
SpringのWebアプリケーションフレームワーク
Servlet Container Netty, Servlet 3.1+ Containers
Servlet API
Spring MVC
Reactive Streams Adapters
Spring WebFlux
Servlet Stack Reactive Stack
フレームワーク
抽象レイヤ
アプリケーションサーバ
- 8. © 2020 NTT DATA Corporation 8
Spring MVCとは
• サーブレットAPIに基づくWebアプリケーションフレー
ムワーク
• Tomcatなどのサーブレットコンテナ上で動作
• Spring Frameworkの初期から存在
• 画面アプリケーション向けの機能・APIアプリケーショ
ン向けの機能ともに豊富
Servlet Container
Servlet API
Spring MVC
Servlet Stack
- 9. © 2020 NTT DATA Corporation 9
Spring WebFluxとは
• ノンブロッキングI/Oに基づくWebアプリケーションフ
レームワーク
• Nettyなどの非サーブレットのアプリケーションサーバ
やServlet 3.1以降に対応したサーブレットコンテナ
上で動作
• Spring Framework 5.0から登場
• Reactorによるリアクティブプログラミングを採用
• APIアプリケーション向けの機能を中心に開発が進
められており画面アプリケーション向けの機能は未成
熟
Netty, Servlet 3.1+ Container
Reactive Streams Adapters
Spring WebFlux
Reactive Stack
- 10. © 2020 NTT DATA Corporation 10
Spring MVCとSpring WebFluxの特徴(1)アーキテクチャ
Spring MVCのアーキテクチャ Spring WebFluxのアーキテクチャ
- 11. © 2020 NTT DATA Corporation 11
Spring MVCとSpring WebFluxの特徴(2)リクエスト処理方式
スレッド1
スレッド2
スレッド3
スレッドN
イベントループ
スレッド
Spring MVC Spring WebFlux
・・・
1リクエストを1スレッドで処理 複数リクエストを1スレッドで処理
- 12. © 2020 NTT DATA Corporation 12
Spring MVCとSpring WebFluxの特徴(2)リクエスト処理方式
Spring MVC Spring WebFlux
実装し
やすさ
処理を同期的に実装できる
ノンブロッキングI/O、リアクティブプログラミング
の理解が必要になる
機能性
スレッドローカルを前提とする機能が利用でき
る(セッション、ロギングのMDCなど)
スレッドローカルを前提とする機能が利用でき
ない(ただしセッションは同等機能が用意さ
れている)
メモリ
使用量
多くのスレッドが必要になり、スレッドごとにメモ
リの確保が必要になる
スレッドが少なくてすむ
CPU
利用
効率
ブロッキングI/Oのため、I/Oの待ち時間が発
生する
ノンブロッキングI/Oのため、I/Oの待ち時間に
別の処理を実行できる
スルー
プット
高スループットの実現には多くのスレッドが必
要になる
遅いクライアントからの接続があるとその分ス
レッドが解放されない
少ないスレッドで多くのリクエストを処理できる
遅いクライアントからの接続があっても影響が
小さい
- 13. © 2020 NTT DATA Corporation 13
Spring MVCとSpring WebFluxのユースケース例
Spring MVC
Spring WebFlux
画面アプリケーション
• 画面アプリケーション向けの機能が豊富
ブロッキング処理への依存があるアプリケーション
• ブロッキング処理を前提とするSpring MVCと組み合わせたほうがよい
既存のSpring MVCアプリケーション
• 現状に課題がなければSpring WebFluxに積極的に置き換える必要性は低い
高スループットが要求されるアプリケーション
• Spring WebFluxの特性を生かしやすい
新規のAPIアプリケーション(マイクロサービスなど)
• 省メモリでリソース効率の高いアプリケーションが実装できる
• リアクティブプログラミングへの理解が必要となることには注意が必要
- 14. © 2020 NTT DATA Corporation
今こそ知りたいSpring MVC
14
- 15. © 2020 NTT DATA Corporation 15
Spring MVCとは
• サーブレットAPIに基づくWebアプリケーションフレー
ムワーク
• Tomcatなどのサーブレットコンテナ上で動作
• Spring Frameworkの初期から存在
Servlet Container
Servlet API
Spring MVC
Servlet Stack
- 16. © 2020 NTT DATA Corporation 16
Spring MVCのアーキテクチャ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
- 17. © 2020 NTT DATA Corporation 17
Spring MVCの実装サンプル(画面アプリケーション)
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<p th:text="${message}"></p>
</body>
</html>
Controller
HelloMvcController
Template
hello.html
開発者が実装する部分
ControllerクラスとしてDIコンテナに登録するためのアノテーション
Thymeleafのテンプレート
- 18. © 2020 NTT DATA Corporation 18
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
リクエストを受ける
- 19. © 2020 NTT DATA Corporation 19
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
URLやGET/POSTなど
の条件からリクエストに
マッチするメソッドを見つ
ける
- 20. © 2020 NTT DATA Corporation 20
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
URLやGET/POSTなど
の条件からリクエストに
マッチするメソッドを見つ
ける
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
/hello というURLへのGETリクエストの場合、
handleHelloメソッドが選択される
@PostMappingなどHTTPリクエストメソッドに対応
したアノテーションがある
Controller
- 21. © 2020 NTT DATA Corporation 21
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
リクエストの内容をメソッ
ドの引数に変換してメ
ソッドに引き渡す
- 22. © 2020 NTT DATA Corporation 22
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
Modelオブジェクトが準備される
リクエストの内容をメソッ
ドの引数に変換してメ
ソッドに引き渡す
Controller
- 23. © 2020 NTT DATA Corporation 23
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
リクエストを処理し、Viewに
渡す値をModelに格納し、
View名を返す
- 24. © 2020 NTT DATA Corporation 24
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
Modelに文字列を格納
リクエストを処理し、Viewに
渡す値をModelに格納し、
View名を返す
View名としてhelloを返す
Controller
- 25. © 2020 NTT DATA Corporation 25
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
View名からViewの実装と
Templateのパスを特定する
- 26. © 2020 NTT DATA Corporation 26
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
View名からViewの実装と
Templateのパスを特定する
「View名:hello」から
「template/hello.html」を
特定
- 27. © 2020 NTT DATA Corporation 27
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
TemplateとModelの値から
レスポンスを生成
- 28. © 2020 NTT DATA Corporation 28
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
TemplateとModelの値から
レスポンスを生成
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<p th:text="${message}"></p>
</body>
</html>
Modelから「message」というキーで格納された文字
列「Hello, Spring MVC!」をテンプレートに当てはめる
Template
- 29. © 2020 NTT DATA Corporation 29
Spring MVCの処理の流れ
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
⑥
⑦
レスポンスを返す
- 30. © 2020 NTT DATA Corporation 30
Spring MVCのアーキテクチャ(APIアプリケーション)
Dispatcher
Servlet
Handler
Mapping
Handler
Adapter
View
Resolver
View
Model
Template
Controller
Spring MVCによって提供される部分 開発者が実装する部分
①
②
③ ④
⑤
- 31. © 2020 NTT DATA Corporation 31
Spring MVCの実装サンプル(APIアプリケーション)
@RestController
public class HelloMvcRestController {
@GetMapping("/hellorest")
public String handleHelloRest() {
String message = "Hello, Spring MVC!";
return message;
}
}
Controller
HelloMvcRestController
開発者が実装する部分
- 32. © 2020 NTT DATA Corporation 32
Spring MVCの実装サンプル(APIアプリケーション)
@RestController
public class HelloMvcRestController {
@GetMapping("/hellorest")
public String handleHelloRest() {
String message = "Hello, Spring MVC!";
return message;
}
}
Controller
HelloMvcRestController
開発者が実装する部分
@Controllerではなく@RestControllerを指定することで、View名を返すのではな
く、レスポンスデータを返すことを指定する
@RestController = @Controller + @ResponseBody
View名ではなくレスポンスデータとして文字列を返す
文字列以外にも任意のクラスやResponseEntityクラスを返す
ことできる
返り値は適切なHttpMessageConverterによってレスポンス
データに変換される
- 33. © 2020 NTT DATA Corporation 33
Spring MVCのまとめ
画面アプリケーションの処理の流れ APIアプリケーションの処理の流れ
@RestController
public class HelloMvcRestController {
@GetMapping("/hellorest")
public String handleHelloRest() {
String message = "Hello, Spring MVC!";
return message;
}
}
@Controller
public class HelloMvcController {
@GetMapping("/hello")
public String handleHello(Model model) {
String message = "Hello, Spring MVC!";
model.addAttribute("message", message);
return "hello";
}
}
- 34. © 2020 NTT DATA Corporation
今こそ知りたいSpring WebFlux
34
- 35. © 2020 NTT DATA Corporation 35
Spring WebFluxとは
• ノンブロッキングI/Oに基づくWebアプリケーションフ
レームワーク
• Nettyなどの非サーブレットのアプリケーションサーバ
やServlet 3.1以降に対応したサーブレットコンテナ
上で動作
• Spring Framework 5.0から登場
• Reactorによるリアクティブプログラミングを採用
Netty, Servlet 3.1+ Container
Reactive Streams Adapters
Spring WebFlux
Reactive Stack
- 36. © 2020 NTT DATA Corporation 36
Spring WebFluxのアーキテクチャ
Dispatcher
Handler
Handler
Mapping
Handler
Adapter
HandlerResult
Handler
View
Model
Template
Controller
Spring WebFluxによって提供される部分 開発者が実装する部分
View
Resolver
①
②
③ ④
⑤
⑥
⑦
- 37. © 2020 NTT DATA Corporation 37
Spring WebFluxの処理の流れ
Dispatcher
Handler
Handler
Mapping
Handler
Adapter
HandlerResult
Handler
View
Model
Template
Controller
Spring WebFluxによって提供される部分 開発者が実装する部分
View
Resolver
①
②
③ ④
⑤
⑥
⑦
リクエストを
受ける
リクエストの内容を
メソッドの引数に変
換してメソッドに引
き渡す
リクエストにマッチする
メソッドを見つける リクエストを処理し、
Viewに渡す値を
Modelに格納し、
View名を返す
View名からViewの
実装とTemplateの
パスを特定する
Templateと
Modelの値から
レスポンスを生成
レスポンスを
返す
- 38. © 2020 NTT DATA Corporation 38
Spring WebFluxのアーキテクチャ(APIアプリケーション)
Dispatcher
Handler
Handler
Mapping
Handler
Adapter
HandlerResult
Handler
View
Model
Template
Controller
Spring WebFluxによって提供される部分 開発者が実装する部分
View
Resolver
①
②
③ ④
⑤
⑥
- 39. © 2020 NTT DATA Corporation 39
Spring WebFluxの実装サンプル(APIアプリケーション)
@RestController
public class HelloWebFluxRestController {
@GetMapping("/hellorest")
public Mono<String> handleHelloRest() {
String message = "Hello, Spring WebFlux!";
return Mono.just(message);
}
}
Controller
HelloWebFluxRestController
開発者が実装する部分
- 40. © 2020 NTT DATA Corporation 40
Spring WebFluxの実装サンプル(APIアプリケーション)
@RestController
public class HelloWebFluxRestController {
@GetMapping("/hellorest")
public Mono<String> handleHelloRest() {
String message = "Hello, Spring WebFlux!";
return Mono.just(message);
}
}
Controller
HelloWebFluxRestController
開発者が実装する部分
@RestController、@GetMappingはSpring MVCと同様に
使える
- 41. © 2020 NTT DATA Corporation 41
Spring WebFluxの実装サンプル(APIアプリケーション)
@RestController
public class HelloWebFluxRestController {
@GetMapping("/hellorest")
public Mono<String> handleHelloRest() {
String message = "Hello, Spring WebFlux!";
return Mono.just(message);
}
}
Controller
HelloWebFluxRestController
開発者が実装する部分
メソッドの返り値の型がMono<String>
文字列からMonoを生成して返す
- 42. © 2020 NTT DATA Corporation 42
Reactorとは
• ノンブロッキング・非同期・イベントドリブンのプログラミングモデルであるリアクティブプログラミングの仕組みを提
供するライブラリ
• リアクティブプログラミングの標準であるReactive Streamsに準拠
• Stream APIのような形で実装
Flux<T> 0個以上(無限も可)のデータを持つList/Streamのようなもの
Mono<T> 0 or 1個のデータを持つObject/Optionalのようなもの
- 43. © 2020 NTT DATA Corporation 43
Reactorとは Stream APIとFluxの比較
List<Integer> input = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> output = input.stream()
.filter(i -> i % 2 == 0)
.map(i -> i * 2)
.collect(Collectors.toList());
System.out.println(output);
Flux<Integer> input = Flux.just(1, 2, 3, 4, 5);
Flux<Integer> output = input
.filter(i -> i % 2 == 0)
.map(i -> i * 2);
output.subscribe(i -> System.out.println(i));
Stream APIの例
Fluxの例
Stream APIと同様filter・mapなどの演算子がある
subscribeされるまで何も実行されない
=subscribeのイベントを契機に処理が実行される
整数のデータ列のうち、偶数のデータだけを抜き出して2倍する処理
- 44. © 2020 NTT DATA Corporation 44
Reactorとは もう少し複雑な例
Mono.just("Reactor Mono") // 文字列1個を発生させる
.map(str -> String.format("Hello, %s!", str)) // 文字列を変換する
.subscribe(System.out::println); // 標準出力に出力する
=> Hello, Reactor Mono!
Flux.interval(Duration.ofSeconds(1)) // 1秒ごとにデータを発生させる
.take(5) // 先頭の5個分のみを取得する
.map(l -> LocalDateTime.now()) // 現在時刻を返す
.subscribe(d -> Sytem.out.println(d)); // 現在時刻を標準出力に出力する
=> 2020-12-17T13:50:35.058993
2020-12-17T13:50:36.033929
2020-12-17T13:50:37.034292
2020-12-17T13:50:38.033898
2020-12-17T13:50:39.033848
- 45. © 2020 NTT DATA Corporation 45
Spring WebFluxの実装サンプル(APIアプリケーション)
@RestController
public class HelloWebFluxRestController {
@GetMapping("/hellorest")
public Mono<String> handleHelloRest() {
String message = "Hello, Spring WebFlux!";
return Mono.just(message);
}
}
Controller
HelloWebFluxRestController
開発者が実装する部分
メソッドの返り値の型がMono<String>
文字列からMonoを生成して返す
Monoはフレームワーク内部で
subscribeされる
- 46. © 2020 NTT DATA Corporation 46
Spring WebFluxによるServer-Sent Eventsの実装例
@GetMapping("/interval")
public Flux<Message> handleInterval() {
return Flux.interval(Duration.ofSeconds(1))
.take(5)
.map(l -> new Message(LocalDateTime.now().toString()));
}
- 47. © 2020 NTT DATA Corporation 47
Spring WebFluxによるServer-Sent Eventsの実装例
@GetMapping("/interval")
public Flux<Message> handleInterval() {
return Flux.interval(Duration.ofSeconds(1))
.take(5)
.map(l -> new Message(LocalDateTime.now().toString()));
}
メソッドの返り値の型にFluxを指定
- 48. © 2020 NTT DATA Corporation 48
Spring WebFluxによるServer-Sent Eventsの実装例
@GetMapping("/interval")
public Flux<Message> handleInterval() {
return Flux.interval(Duration.ofSeconds(1))
.take(5)
.map(l -> new Message(LocalDateTime.now().toString()));
}
curl -H 'Accept: text/event-stream;' http://localhost:8080/interval
=> data:{"message": "2020-12-17T16:35:48.413935"}
data:{"message": "2020-12-17T16:35:49.405907"}
data:{"message": "2020-12-17T16:35:50.405909"}
data:{"message": "2020-12-17T16:35:51.405992"}
data:{"message": "2020-12-17T16:35:52.405936"}
curl -H 'Accept: application/x-ndjson;' http://localhost:8080/interval
=> {"message": "2020-12-17T16:35:48.413935"}
{"message": "2020-12-17T16:35:49.405907"}
{"message": "2020-12-17T16:35:50.405909"}
{"message": "2020-12-17T16:35:51.405992"}
{"message": "2020-12-17T16:35:52.405936"}
メソッドの返り値の型にFluxを指定
リクエスト時のAcceptヘッダでServer-Sent EventsのMIMEタイプを指定
1秒ごとにレスポンスデータが送信される
- 49. © 2020 NTT DATA Corporation 49
Spring WebFlux まとめ
画面アプリケーションの処理の流れ
APIアプリケーションの処理の流れ
Flux<T>
0個以上(無限も可)のデータ
を持つList/Streamのようなもの
Mono<T>
0 or 1個のデータを持つ
Object/Optionalのようなもの
- 51. © 2020 NTT DATA Corporation 51
SpringのWebアプリケーションフレームワーク
Servlet Container Netty, Servlet 3.1+ Containers
Servlet API
Spring MVC
Reactive Streams Adapters
Spring WebFlux
Servlet Stack Reactive Stack
Servletベース
ノウハウが多く開発しやすい
ノンブロッキングベース
リソース効率が良い
リアクティブプログラミングの理解が必要
- 52. © 2020 NTT DATA Corporation 52
Spring MVCをもっと詳しく知りたい
• TERASOLUNA Server Framework for Java (5.x) Development Guideline
• https://terasolunaorg.github.io/guideline/
• Spring徹底入門
• https://www.shoeisha.co.jp/book/detail/9784798142470
• 改訂新版 Spring入門
• https://gihyo.jp/book/2016/978-4-7741-8217-9
• 令和時代に「Spring入門」「Spring徹底入門」を読むとき気をつけるべきN個のこと
• https://qiita.com/suke_masa/items/392976749fce94a8ef1f
• 徹底解剖Spring MVCアーキテクチャー –DispacherServletの中身覗いてきました–
• https://www.slideshare.net/ssuser070fa9/spring-fest-2019spring-mvc
• Web on Servlet Stack(Spring MVC公式ドキュメント)
• https://docs.spring.io/spring-framework/docs/current/reference/html/web.html
- 53. © 2020 NTT DATA Corporation 53
Spring WebFluxをもっと詳しく知りたい
• Introdction to Spring WebFlux
• https://www.slideshare.net/makingx/introduction-to-spring-webflux-jsug-sfa1
• Reactive Webアプリケーション – そしてSpring 5へ
• https://www.slideshare.net/makingx/reactive-web-spring-5-jjugccc-cccef3
• Spring 5に備えるリアクティブプログラミング入門
• https://www.slideshare.net/TakuyaIwatsuka/spring-5
• 業務で使いたいSpring WebFluxによるReactiveプログラミング
• https://speakerdeck.com/shintanimoto/introduction-to-reactive-programming-using-spring-
webflux
• Functional Spring Cookbook
• https://docs.google.com/presentation/d/1-0NopTfA-CGiCNvKPDOH9ZDMHhazKuoT-_1R69Wp8qs
• Web on Reactive Stack(Spring WebFlux公式ドキュメント)
• https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html
- 54. © 2020 NTT DATA Corporation 54
宣伝
• IT Search+にてSpring WebFlux入門の連載始めました
• Spring WebFlux・リアクティブプログラミングの入門記事のほか、HTTPクライアントのWebClientやDBアク
セスのR2DBCの入門記事を掲載予定です
• https://news.mynavi.jp/itsearch/article/devsoft/5260
- 55. © 2020 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。