- 2017/11/24
- http://springfest2017.springframework.jp/
What's New in Spring
- Dave Syer(Pivotal)
Spring系のバージョン
- SpringFramework5出たけど4もまだサポート
- 4に依存するものがまだたくさんあるから
3rd partyライブラリ
- Reactorの最新版がSpringFramework5で使われてる
SpringFramework5
- jdk8以降のみ
- servlet3.1
- jms2.0
- jpa2.1
- functional bean configulation
- Reactive
- junit5
- jdk9
- http2
- kotlin
Reactive
- blocking -> non-bocking
- Monoをreturnするようになる
- MonoはPromise的な感じかな?
- spring-boot-starter-web -> spring-boot-starter-webflux
- デフォルトnettyになる
- Mono.just("Hello"):
WebClient
- RestTemplateの代替?
- RestTemplateは6で消えるかもね
- mockMvc -> WebTestClient
SpringBoot
- 2.0は2018/2くらい
- 他に引っ張られて遅くなってる
- SpringCloudはその後
Introduction to Spring WebFlux
- 槙俊明(Pivotal)
- https://www.slideshare.net/makingx/introduction-to-spring-webflux-jsug-sfa1
- http://bit.ly/springfest-maki/
Reactive
- blocking -> non-bocking
- reactive streams
- reactor
- servlet stackではrequestの分だけスレッド
- reactive stackなら少ないスレッドを有効活用できる
- event-loop
- node的な
- blockingはメモリ食う
- 遅めのネットワークから使われる時有効
ReactiveStreams
- publisherとsubscriber
- listで返ってきたようなものをstreamで返す(backpressure)
- ReactiveStreamsの実装
- RxJava
- Reactor(Pivotal製)
- Akka
使い方
- Flux
- 無限かもしれないもの
- 0 ~ n
- Mono
- 0 or 1
- subscribeで発火
- 固定のデータ(just)だけじゃなくて沸き出てくるデータにも対応できる(HotStream)
SpringWebFlux
- SpringMVC or SpringWebFluxとなる
- SpringMVCはblocking/Synchronous
- SpringWebFluxはNon-blocking/Synchronous
- MVCそのまま同じコード使った場合
- SpringWebFluxでさらにMono/Fluxを使うNon-blocking/Asynchronous
- Mono/Fluxをreturnする
- SpringWebMVCでMono/Fluxを使うblocking/Asynchronous
- Mono/Fluxをreturnする
- response
- logメソッドでコンソールに出る
- httpリクエスト終わる前にレスポンス返せる
- transfer-encoding:chunced
- これはMVCじゃできない
- share()つけるとbloadcastできる
WebClient
- RestTemplateの代替
- MonoとかFlux使える
SpringData
- ReactiveCrudRepository
- findByIdとかがMono/Flux対応版
JDBC
SpringSecurity
- Reactiveだと別もの
thymeleaf
- full mode
- 全部データ揃ってから描画
- chunced mode
- ちょっとずつもらって表示
- data-driven mode
- データ揃う前からできたとこから描画
どう使っていくか
Spring Security 5 解剖速報
- 岩塚卓弥(NTTソフトウェアイノベーションセンタ)
- 堅田淳也(NTTソフトウェアイノベーションセンタ)
- https://www.slideshare.net/TakuyaIwatsuka/spring-security5report/TakuyaIwatsuka/spring-security5report
SpringSecurity5
- WebFlux対応
- OAuth2.0対応
WebFlux
- Reactive対応
- ServletAPIに依存しない
- SpringSecurity4では
- ServletFilterに依存
- WebFluxでは使えない
- WebFilterというのが新しくできた
- だいたい従来と同じ
- Reactiveとかserverとか接頭辞がついた
- クラスの役割分担がちょっと変わった
- 従来のMVCを使ったものも継続的に使える
- WebTestClient
- 5から
- WebMockUser
- 4から
OAuth2.0
- 今まではOAuthの機能がいろんなプロダクトに散らばってた(Bootとか)
- それをSpringSecurityで一括管理
ドメイン駆動設計のためのSpringの上手な使い方
- 増田亨(有限会社システム設計/ギルドワークス株式会社)
- https://www.slideshare.net/masuda220/spring-82650951
ドメイン駆動設計とは
- システム構築手法の1つ
- 勝ちを加え続けるソフトウェアに適してる
ドメイン駆動設計の基本
- 開発者がドメインを学ぶ
- モデルと実装を一致させる
- 深いモデルを探求する
- 巨大な複雑さ
開発者がドメインを学ぶ
- ドメインを学んでコードで表現する
モデルと実装を一致させる
- モデルと実装を関連付けると実装が整理され見通しが良くなる
- 実装からフィードバックすることでモデルが実用的になる
- オブジェクト指向によるモジュール化
- 型による知識の表現
深いモデルを探求する
- 暗黙になりがちな知識を明示的に表現する
巨大な複雑さ
- 地道な積み重ね
- 複雑になってもモデルとコードを一致させることが重要
- 俯瞰、蒸留、大きな構造化
Springのプログラミングモデル
- Spring自体DDDの影響を受けている
- @Repositoryとか@Serviceとか
ドメイン駆動設計のためのSpring
SpringBoot
- 動くものをベースに考える
- 学んだことをコードで記録する
- コードでモデルを表現する
- 最初からE2Eで実験する
SpringIntegration
- 複数アプリの連携
- コンテキストマップ
- モデルとモデルの連携パターン
- メッセージングモデル
- データ通信技術ととらえるか、業務モデルとしてとらえているかで設計が全然違ってくる
SpringBatch
- job - step
- 大量データ処理の技術としてみてるか、業務モデルとして見ているか
SpringSecurity
- role/権限の構造
Pivotal認定講師が教える!Spring Data JPAによるデータアクセス徹底入門
JPA, SpringDataJPA
SpringData
- データアクセスを共通化してくれる
JPA
- JavaEEで標準化されたデータアクセス技術
- 仕様
- 決まってるのはインターフェース、アノテーション
- JPAの実装
- Hibernate
- EclipseLink
- DB製品に依存しない
- テーブルとエンティティを1対1で作る
- MyBatisとかはそうじゃないんだ・・・
- SQLのログ出力
- 改行とかインデントを挟む設定もある
JPAのアーキテクチャ
- Entity
- EntityManager
- EntityManagerFactory
- シングルトン
- 永続化コンテキスト
- トランザクション単位で生成破棄
- エンティティの状態
- NEW
- MANAGED
- 永続化コンテキスト内
- DETACHED
- 永続化コンテキスト外
- REMOVED
JPQL
- select/update/deleteを記述する
- insertはない
- persistを使う(put的な動き)
リレーションとN+1対策
- @OneToManyとか
- fetch
- リレーション先のエンティティをいつ呼ぶか
- EAGERフェッチ
- 同時に
- hibernateだとjoin
- LAZYフェッチ
- 必要な時
- select2回呼ぶだけ
- 永続化コンテキスト破棄後だと例外おきる
- 基本LAZYで
- join重い
- いつでも必要とは限らないから
- N+1問題
- joinしても子テーブルの情報はとってこないから意味ない
- JOIN FETCH + DISTINCTを使うと全部とれる
- Listの重複が削除される
SpringDataJPA
- Repositoryインターフェース作るだけで使えちゃう
- 共通の例外へ変換してくれる
- SpringData2.0でメソッド名大幅に変わった
- @QueryつけるとJPQLが書ける
- 更新は@Modified
- ロックは@Lock
- @EntityGraph("グラフ名")
- spring data query creationとかで検索
- DBが違っても例外は共通したものへ変換してくれる
- @CreatedBy,@CreatedDate,@LastModifiedBy,@LastModifiedDate
- AuditorAwareをimplementsしたもの
- @EnableJpaAudio~~~
- LocalDate
- AttributeConverterがある
- boot2からはデフォルト
SpringBoot利用時の注意点
JPAは「使える」のか
Spring と TDD
- 小川岳史(株式会社タグバンガーズ)
- 古家優(株式会社タグバンガーズ)
- https://www.slideshare.net/OgawaTakeshi/spring-tdd
Spring BootとSpring Cloudで始めるマイクロサービス
- 谷本心(AcroquestTechnology株式会社/日本Javaユーザーグループ)
MicroService
MicroServiceとは?
- モノリスvsマイクロサービス