Submit Search
Spring I/O 2017 報告 ThymeleafのWebFlux対応
8 likes
3,429 views
Takuya Iwatsuka
2017年6月29日にJSUGのSpring I/O 2017報告会での発表に使用した資料です.
Engineering
Read more
1 of 37
Download now
Downloaded 11 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
More Related Content
PDF
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Takuya Iwatsuka
PPTX
Spring I/O 2015 報告
Takuya Iwatsuka
PDF
SpringOne 2016 報告 Reactive APIの設計・実装・使用
Takuya Iwatsuka
PDF
Spring social の基礎
Takuya Iwatsuka
PPTX
Spring 5に備えるリアクティブプログラミング入門
Takuya Iwatsuka
PPTX
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Takuya Iwatsuka
PPTX
SpringIO2019報告_Kotlin関連
ShingoKurihara1
PDF
ニュースアプリで起きた不具合から学んだ 最適への一歩
Yahoo!デベロッパーネットワーク
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Takuya Iwatsuka
Spring I/O 2015 報告
Takuya Iwatsuka
SpringOne 2016 報告 Reactive APIの設計・実装・使用
Takuya Iwatsuka
Spring social の基礎
Takuya Iwatsuka
Spring 5に備えるリアクティブプログラミング入門
Takuya Iwatsuka
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Takuya Iwatsuka
SpringIO2019報告_Kotlin関連
ShingoKurihara1
ニュースアプリで起きた不具合から学んだ 最適への一歩
Yahoo!デベロッパーネットワーク
What's hot
(20)
PDF
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
Yahoo!デベロッパーネットワーク
PDF
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo!デベロッパーネットワーク
PPTX
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
gree_tech
PDF
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
PDF
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
PDF
僕とヤフーと時々Teradata #prestodb
Yahoo!デベロッパーネットワーク
PDF
決済金融から始めるデータドリブンカンパニー #yjmu
Yahoo!デベロッパーネットワーク
PDF
Spring Security 5.0 解剖速報
Takuya Iwatsuka
PDF
Keynote
gree_tech
PDF
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo!デベロッパーネットワーク
PDF
Ladder of cqrs+es
Masaki Toyoshima
PDF
Design pattern in presto source code
Yahoo!デベロッパーネットワーク
PDF
コンテナ時代にインフラエンジニアは何をするのか
gree_tech
PDF
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
Naohiro Yoshida
PDF
Storm の新機能について @HSCR #hadoopreading
Yahoo!デベロッパーネットワーク
PDF
Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...
Yahoo!デベロッパーネットワーク
PDF
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Yuichi Hasegawa
PDF
TypeScript製フレームワーク「Nest」のご紹介
bitbank, Inc. Tokyo, Japan
PPTX
Spring Security 4.1 の新機能
正和 井岡
PDF
10大ニュースで振り返るPGCon2015
NTT DATA OSS Professional Services
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
Yahoo!デベロッパーネットワーク
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo!デベロッパーネットワーク
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
gree_tech
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
Apache Big Data Miami 2017 - Hadoop Source Code Reading #23 #hadoopreading
Yahoo!デベロッパーネットワーク
僕とヤフーと時々Teradata #prestodb
Yahoo!デベロッパーネットワーク
決済金融から始めるデータドリブンカンパニー #yjmu
Yahoo!デベロッパーネットワーク
Spring Security 5.0 解剖速報
Takuya Iwatsuka
Keynote
gree_tech
Yahoo! JAPANのサービス開発を10倍早くした社内PaaS構築の今とこれから
Yahoo!デベロッパーネットワーク
Ladder of cqrs+es
Masaki Toyoshima
Design pattern in presto source code
Yahoo!デベロッパーネットワーク
コンテナ時代にインフラエンジニアは何をするのか
gree_tech
Spring Framework / Boot / Data 徹底活用 〜Spring Data Redis 編〜
Naohiro Yoshida
Storm の新機能について @HSCR #hadoopreading
Yahoo!デベロッパーネットワーク
Dataworks Summit 2017 SanJose StreamProcessing - Hadoop Source Code Reading #...
Yahoo!デベロッパーネットワーク
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Yuichi Hasegawa
TypeScript製フレームワーク「Nest」のご紹介
bitbank, Inc. Tokyo, Japan
Spring Security 4.1 の新機能
正和 井岡
10大ニュースで振り返るPGCon2015
NTT DATA OSS Professional Services
Ad
Similar to Spring I/O 2017 報告 ThymeleafのWebFlux対応
(20)
PDF
Dockerコミュニティ近況
Akihiro Suda
PDF
Talk 1「データインテグレーションとは何か」
Takeshi Akutsu
PDF
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
PDF
新しいTERASOLUNA Batch Frameworkとは
apkiban
PDF
Cloudera Impalaをサービスに組み込むときに苦労した話
Yukinori Suda
PPTX
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
Tetsutaro Watanabe
PDF
[db tech showcase Tokyo 2016] B31: Spark Summit 2016@SFに参加してきたので最新事例などを紹介しつつデ...
Insight Technology, Inc.
PPTX
そろそろSELinux を有効にしてみませんか?
Atsushi Mitsu
PDF
Classmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンス
Takeo Hirakawa
PDF
OpenStack Swift紹介
Kota Tsuyuzaki
PPTX
stapy_028_talk1
Takeshi Akutsu
PDF
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Treasure Data, Inc.
PDF
Yahoo! JAPANのOracle構成-2017年版
Yahoo!デベロッパーネットワーク
PPTX
Yahoo! JAPANのOracle構成-2017年版
Makoto Sato
PDF
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
PPTX
Spring tools4
Takuya Iwatsuka
PPTX
OpenStack Congress Deep Dive
masahito12
PDF
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向
Naoki (Neo) SATO
PDF
[DI06] 並列分散処理の考え方とオープンソース分散処理系の動向
de:code 2017
PDF
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
Insight Technology, Inc.
Dockerコミュニティ近況
Akihiro Suda
Talk 1「データインテグレーションとは何か」
Takeshi Akutsu
PostgreSQL 9.6 新機能紹介
Masahiko Sawada
新しいTERASOLUNA Batch Frameworkとは
apkiban
Cloudera Impalaをサービスに組み込むときに苦労した話
Yukinori Suda
ML Ops NYC 19 & Strata Data Conference 2019 NewYork 注目セッションまとめ
Tetsutaro Watanabe
[db tech showcase Tokyo 2016] B31: Spark Summit 2016@SFに参加してきたので最新事例などを紹介しつつデ...
Insight Technology, Inc.
そろそろSELinux を有効にしてみませんか?
Atsushi Mitsu
Classmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンス
Takeo Hirakawa
OpenStack Swift紹介
Kota Tsuyuzaki
stapy_028_talk1
Takeshi Akutsu
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
Treasure Data, Inc.
Yahoo! JAPANのOracle構成-2017年版
Yahoo!デベロッパーネットワーク
Yahoo! JAPANのOracle構成-2017年版
Makoto Sato
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
Spring tools4
Takuya Iwatsuka
OpenStack Congress Deep Dive
masahito12
[de:code 2017] 並列分散処理の考え方とオープンソース分散処理系の動向
Naoki (Neo) SATO
[DI06] 並列分散処理の考え方とオープンソース分散処理系の動向
de:code 2017
[db tech showcase Tokyo 2014] D33: Prestoで実現するインタラクティブクエリ by トレジャーデータ株式会社 斉藤太郎
Insight Technology, Inc.
Ad
Spring I/O 2017 報告 ThymeleafのWebFlux対応
1.
Copyright©2017 NTT corp.
All Rights Reserved. Spring I/O 2017 報告会 ThymeleafのWebFlux対応 2017年6⽉29⽇ NTT ソフトウェアイノベーションセンタ 岩塚 卓弥
2.
2Copyright©2017 NTT corp.
All Rights Reserved. • 名前:岩塚 卓弥 • 所属:NTT ソフトウェアイノベーションセンタ • NTTの研究所のうちソフトウェアを専⾨に扱う • ⾃部署ではソフトウェア⼯学を研究 • Springベースのグループ共通フレームワークの整備を担当 • Spring I/Oには2015年から3年連続参加 ⾃⼰紹介
3.
3Copyright©2017 NTT corp.
All Rights Reserved. • Getting Thymeleaf Ready for Spring 5 and Reactive • Daniel Fernández – Thymeleaf lead • スライド • https://speakerdeck.com/dfernandez/o-2017-getting- thymeleaf-ready-for-spring-5-and-reactive • デモ • https://github.com/danielfernandez/reactive-matchday 今⽇の元ネタ(⼀次資料)
4.
4Copyright©2017 NTT corp.
All Rights Reserved. • Thymeleaf 3を使⽤している • Thymeleaf 2を使⽤している • JSPを使⽤している • その他のテンプレートエンジンを使っている 会場アンケート:Thymeleaf 使ってますか
5.
5Copyright©2017 NTT corp.
All Rights Reserved. 世界での利⽤状況 Spring Initializrで選択される テンプレートエンジンのうち 75%程度がThymeleaf Thymeleaf Freemarker Mustache Groovy Templates Velocity ⽉間DL数は22万以上 ⼀年で7万5千以上の伸び Spring I/O 2017 Keynoteより
6.
6Copyright©2017 NTT corp.
All Rights Reserved. Spring MVC × Thymeleaf 3 の基本形 greeting.html 実装 出⼒
7.
7Copyright©2017 NTT corp.
All Rights Reserved. Spring MVC × Thymeleaf 3 処理概略 TemplateName Context Engine Model Template +α HTML Controllerで設定したModel (Map<String, Object>)
8.
8Copyright©2017 NTT corp.
All Rights Reserved. Spring MVC × Thymeleaf 3 処理概略 TemplateName Context Engine Model Template +α HTML Controllerから渡された View名を解決したもの ServletContextや パス変数等を追加
9.
9Copyright©2017 NTT corp.
All Rights Reserved. Spring MVC × Thymeleaf 3 処理概略 TemplateName Context Engine Model Template +α HTMLTemplateを取得 TemplateとContextから HTMLを⽣成
10.
10Copyright©2017 NTT corp.
All Rights Reserved. Spring MVC × Thymeleaf 3 処理概略 TemplateName Context Engine Model Template +α HTML HttpServletResponseに 書き込み
11.
11Copyright©2017 NTT corp.
All Rights Reserved. Reactive化? TemplateName Context Engine Model Template +α HTML Blocking! Blocking!
12.
12Copyright©2017 NTT corp.
All Rights Reserved. Reactive化? TemplateName Context Engine Model Template +α HTML Blocking! Reactive! 出⼒をPublisherに
13.
13Copyright©2017 NTT corp.
All Rights Reserved. • FULL • CHUNKED • DATA-DRIVEN Reactiveな3つの処理モード
14.
14Copyright©2017 NTT corp.
All Rights Reserved. FULLモード HTML Mono<DataBuffer>Engine ServerHttpResponseに書き込み HTMLを⼀括⽣成して⼀括出⼒ → 最もシンプルだがメモリ消費は⼤
15.
15Copyright©2017 NTT corp.
All Rights Reserved. • FULL • CHUNKED • DATA-DRIVEN Reactiveな3つの処理モード
16.
16Copyright©2017 NTT corp.
All Rights Reserved. CHUNKEDモード <!DOCTYPE html> … Flux<DataBuffer>Engine ServerHttpResponseに書き込み ・・・ … </html> HTMLを⼀定のバイト数ごとに区切って⽣成 → backpressureによって速度調整可能に
17.
17Copyright©2017 NTT corp.
All Rights Reserved. • FULL • CHUNKED • DATA-DRIVEN Reactiveな3つの処理モード
18.
18Copyright©2017 NTT corp.
All Rights Reserved. FULL / CHUNKED に共通の課題 Model Mono Flux
19.
19Copyright©2017 NTT corp.
All Rights Reserved. FULL / CHUNKED に共通の課題 Context Engine Model Mono Flux ArrayList Mono Mono AbstractView#resolveAsyncAttributes CollectList
20.
20Copyright©2017 NTT corp.
All Rights Reserved. DATA-DRIVENモード Context Engine Model ReactiveDataDriverContextVariable wrapすることでresolutionを回避 … … … ThymeleafがProcessorのように振る舞う
21.
21Copyright©2017 NTT corp.
All Rights Reserved. DATA-DRIVEN & SSE DATA-DRIVENモードの場合はデータ1件ごとに 部分的なHTMLをSSEで送信可能 <table> <tr data-th-each=“name : ${names}”> <td>[[${name}]]</td> </tr> </table> + Alice Bob Carol event: head id: 0 data: <table> event: body id: 1 data: <tr> data: <td>Alice</td> data: <tr> event: tail id: 4 data: </table> ・・・
22.
22Copyright©2017 NTT corp.
All Rights Reserved. デモアプリ紹介 試合状況 コメント
23.
23Copyright©2017 NTT corp.
All Rights Reserved. 初期画⾯表⽰ Agent Controller ReavtiveMongoTemplate ReactiveMongoRepository match/{matchId} 初期画⾯ リクエスト以前のコメント 対戦チーム情報など
24.
24Copyright©2017 NTT corp.
All Rights Reserved. 初期画⾯表⽰の実装 - MatchController コメントのFluxを取得 コメントのFluxをReactiveDataDriverContextVariableで warpしてModelに追加 → DATA-DRIVENモード
25.
25Copyright©2017 NTT corp.
All Rights Reserved. デモアプリ紹介 動的に更新
26.
26Copyright©2017 NTT corp.
All Rights Reserved. 試合状況描画 Agent Controller ReavtiveMongoTemplate ReactiveMongoRepository match/{matchId}/statusStream 画⾯の⼀部 (SSEで送信) 試合状況 javascriptで画⾯に反映
27.
27Copyright©2017 NTT corp.
All Rights Reserved. 試合状況描画 Agent Controller ReavtiveMongoTemplate ReactiveMongoRepository 画⾯の⼀部を⽣成 (SSEで送信) 新しい試合状況を取得 javascriptで画⾯に反映 得点や警告などの イベントをランダム⽣成 新しいイベントを挿⼊
28.
28Copyright©2017 NTT corp.
All Rights Reserved. 試合状況描画の実装 - MatchEventInfoRepository MongoDBのTailable Cursorを使⽤して 新しくinsertされたデータを取得し続ける
29.
29Copyright©2017 NTT corp.
All Rights Reserved. 試合状況描画の実装 - MatchController SSEで送信 Thymeleafで画⾯の⼀部を⽣成 DATA-DRIVEN モード
30.
30Copyright©2017 NTT corp.
All Rights Reserved. 試合状況描画の実装 – match.html (js) SSEで送信されてきた画⾯の⼀部を使って 画⾯を部分的に書き換える 部分⽣成対象
31.
31Copyright©2017 NTT corp.
All Rights Reserved. デモアプリ紹介 動的に追加
32.
32Copyright©2017 NTT corp.
All Rights Reserved. コメント描画 Agent Controller ReavtiveMongoTemplate ReactiveMongoRepository match/{matchId}/commentStream? timestamp=xxxxxxxx(初期リクエスト時刻) json (SSEで送信) 指定timestampより 後のコメント javascriptで画⾯に反映
33.
33Copyright©2017 NTT corp.
All Rights Reserved. コメント描画 Agent Controller ReavtiveMongoTemplate ReactiveMongoRepository json (SSEで送信) javascriptで画⾯に反映 コメントをランダム⽣成 新しいコメントを取得 新しいコメントを挿⼊
34.
34Copyright©2017 NTT corp.
All Rights Reserved. 試合状況描画の実装 - MatchCommentRepository MongoDBのTailable Cursorを使⽤して 新しくinsertされたデータを取得し続ける
35.
35Copyright©2017 NTT corp.
All Rights Reserved. コメント描画の実装 - MatchController jsonをSSEで送信
36.
36Copyright©2017 NTT corp.
All Rights Reserved. 試合状況描画の実装 – match.html (js) SSEで送信されてきたjsonデータを使って 画⾯を部分的に書き換える
37.
37Copyright©2017 NTT corp.
All Rights Reserved. • Thymeleaf 3 × WebFluxでReactiveなView出⼒ • 3つの処理モード • FULL • CHUNKED • DATA-DRIVEN • ⾒所満載のデモ まとめ 是⾮⼀次資料(スライド / ソースコード)に アクセスしてみて下さい!
Download