JSUG勉強会 2019その6 Spring IO 報告会に行ってきました。簡単に所感をまとめます。
所感
最近はレガシーなシステムのお守りに追われて新しい情報を追えてなかったので、いろいろと新鮮な情報がいっぱいでした。
とはいえ、なかなか Reactive なシステムを開発する機会がなく、RSocket や R2DBC などは未だに試せていない状態です...。GraalVM とかかなりホットな話題なので素振りしておきたいところ。以前、ちょっと触ってみた Micronaut あたりで GraalVM を試してみようか。もしくは Quarkus あたり?
あと、Moduliths はなかなか面白そう。アーキテクチャをテストできるという意味では、JJUG CCC 2019 Spring で紹介されていた ArchUnit と近いものがあるんだろうか。
JJUG CCC 2019 Spring に行ってきた #jjug_ccc - kntmr-blog
以下、メモから抜粋。(2019/07/02: 資料のリンクを追記しました)
Spring Framework のロードマップと 5.2 の新機能
www.slideshare.net
- Spring 5.2 は 9/4 GA に延期
- 5.x で取り入れた機能のアップデートがメイン
- Reactive API
- RSocket (マイクロサービス間の通信)
- R2DBC (RDBMSへのリアクティブアクセス)
- R2Socket
- R2DBC
- Reactor のデバッグ出力を改善
- トレース生成のコストは高い
- 関数型 API の整備
- Router Function が MVC で使える
- Spring 5.3
- JDKアップデートに追従 (13-15)
- Code Analysis Annotations
@Nullable
?
- GraalVM
- Spring 5.x で対応されないもの
Spring 5.2 の Kotlin 対応
www.slideshare.net
- Coroutine 対応
- WebFlux 向けの機能をサポート
- ReactiveX に替わるものではない
- Reactive と Coroutine は同じように使える
- Spring Kofu
- Experimental
- Functional Configuration
- アプリ起動の高速化、省メモリ
GraalVMの概要と、Native-Image化によるSpring Boot爆速化の夢
www.slideshare.net
- Graal コンパイラ
- Truffle
- Native Image
- 現時点ではそのまま Spring Boot アプリを Native Image にはできない (制限が多い)
- リフレクションや Dynamic Proxy で動的なクラス生成を多用しているため
- Spring 5.3 で Native Image に正式対応予定
- 今のところ Native Image のビルド時間は非常に長い
Spring Cloud Netflix
www.slideshare.net
- ほとんどがメンテナンスモードに
- 脆弱性やバグfixは Pull Request で対応
- Ribbon ⇒ Spring Cloud Load Balancer
- アノテーションを切り替えるだけ
- WebClient が使える
- Eureka ⇒ Spring Cloud Zookeeper
- メンテナンスモード対象ではない
- 移行パスを検討中
- Zuul ⇒ Spring Cloud Gateway
- アノテーションが不要に
- 明示的にルート定義が必要
- Hystrix ⇒ Spring Cloud Circuit Breaker + Resilience4j
- Hystrix Stream, Turbine, Hystrix Dashboard ⇒ Micrometer + Prometheus
- メトリクス情報を収集して監視ツールにエンドポイントを提供する
- Archaius ⇒ Spring Cloud Config Server
- そもそもアーキテクチャが違う
- Archaius は各サービスがプロパティを取得するためのエンドポイントを提供する
- Config Server は各サービスにプロパティを配布して起動時にロードさせる
- マイクロサービス開発を担うプロダクトは多い
- 今後、統廃合があったりするかもしれない
Spring Boot で作るいまどきなモノリス
www.slideshare.net
- Modular Monoliths
- Moduliths
- パッケージをモジュールで分割する (ドメイン)
- main がある階層のパッケージがモジュールになる
- モジュール間のDIを避ける
- EventListener で依存モジュールに Event を送る
@DomainEvent
- Bootstrap Modes
- Standalone, Direct dependencies, All dependencies
- モジュールのパッケージ直下に配置したクラスは他モジュールに公開される
- サブパッケージ配下のクラスは他モジュールには非公開
- 相互依存をチェックしてエラーにしてくれる
- Documenter
- モジュールの関連グラフを作ってくれる (PlantUML)
- Java のモジュールシステムと関係があるものではない
- Moduliths はテストをサポートするもの