Construindo APIs de forma produtiva com Spring Boot, Spring Data e Spring MVC
さくっと理解するSpring bootの仕組み
-
Upload
ogawa-takeshi -
Category
Software
-
view
2.652 -
download
1
Transcript of さくっと理解するSpring bootの仕組み
![Page 1: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/1.jpg)
さくっと理解するSpring Boot のしくみJJUG ナイトセミナー2017.1.23株式会社タグバンガーズ小川岳史
![Page 2: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/2.jpg)
2
• 株式会社タグバンガーズ• JSUG スタッフ• Spring Lover (10 years)• Spring I/O, Spring One 参加• WallRide (OSS)• From 横浜
• TagBar
自己紹介
![Page 3: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/3.jpg)
3
Spring と Spring Boot の関係Spring Boot が改善する開発プロセスSpring Boot の構成要素
今日話すこと
![Page 4: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/4.jpg)
4
Spring と Spring Boot の関係
![Page 5: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/5.jpg)
5
そもそも Spring ってなに?
次のセッションで話しますSpring Spring Framework≒DI コンテナの機能を含むコアプロジェクト
今回話すプロジェクト
![Page 6: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/6.jpg)
6
• ざっくりいえば・・Spring と Spring Boot の関係
Spring から
面倒な設定を排除し
Tomcat を追加したものが・・
Spring Boot
SpringCONFIG
![Page 7: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/7.jpg)
Spring Boot が改善する開発プロセス
7
![Page 8: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/8.jpg)
8
一般的な開発のプロセス1. 必要なライブラリのリストアップ
5. モニタリング
2. 起動に必要な Bean の定義をする3. プログラミング4. パッケージング・デプロイ
![Page 9: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/9.jpg)
9
1. 必要なライブラリをリストアップ<dependencies>
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId><version>5.3.4.Final</version>
</dependency><dependency>
<groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId> <version>2.8.6</version>
</dependency><dependency>
<groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <optional>true</optional>
</dependency> <dependency>
<groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>2.0.0.BUILD-SNAPSHOT</version>
</dependency> </dependencies>
Before
記述量が減るバージョンの互換性を気にしなくてよい
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
After
![Page 10: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/10.jpg)
10
2. 起動に必要な Bean の定義をするspring-boot-starter-xxxStarters
自分で Bean 定義
Container
自動で Bean を定義してくれる
AutoConfigure
![Page 11: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/11.jpg)
11
3. プログラミング
Tomcat 内包生産性が上がる
![Page 12: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/12.jpg)
12
4. パッケージング・デプロイ
$ ./app.jar
Fully Executable jar
![Page 13: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/13.jpg)
13
5. モニタリングAfter
エンドポイントの自動配備
![Page 14: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/14.jpg)
14
Spring Boot のしくみ
![Page 15: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/15.jpg)
15
Spring Boot の構成要素
CLI
Starter
Actuator
Auto-configure
Tools
起動が楽になるCore
ライブラリ同士のバージョン互換を解決自動で Bean を準備してくれる
アプリのモニタリングひな形をCLI ベースで作れる
Test開発効率を上げる便利ツール
JUnit のユーティリティ
![Page 16: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/16.jpg)
16
Core起動が簡単に! CLI
Starter
Actuator
Auto-configure
Tools
Core
Test
![Page 17: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/17.jpg)
17
Tomcat が内包されているStarter
Jetty, Undertow に置き換えできるTomcat 7 から組み込み版が対応→ Spring Boot がこれを組み込みした
CLIActuator
Auto-configure
ToolsTest
起動が楽になるCore
![Page 18: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/18.jpg)
18
• バイナリ1+コマンド1発で起動したい• が、 Java はネストした jar を用意していない
• よくある対応策 … uber jar (fat jar) • jar の中のコンテンツを全て展開してもう一度まとめる• 問題点
• どのコンテンツがどのものかわからない• jar 内のコンテンツ名前がかぶる可能性がある
• Spring Boot が作成する jar … Nested jar• uber jar (fat jar) ではない• 特殊なローダーに内包することでネストした jar を作っている
Fully Executable JarStarter
CLIActuator
Auto-configure
ToolsTest
起動が楽になるCore
![Page 19: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/19.jpg)
19
Executable にするには設定が必要Maven
Fully Executable Jar 2Starter
CLIActuator
Auto-configure
ToolsTest
起動が楽になるCore
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration>
<executable>true</executable></configuration>
</plugin>
springBoot {executable = true
}
Gradle
![Page 20: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/20.jpg)
20
Startersライブラリ同士のバージョン互換を解決 CLI
Starter
Actuator
Auto-configure
Tools
起動が楽になるCore
自動で Bean を準備してくれる
アプリのモニタリングひな形をCLI ベースで作れる
Test開発効率を上げる便利ツール
jUnit のユーティリティ
![Page 21: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/21.jpg)
21
• 実態は pom しかない• 自分で Starter をつくれるStarters の実態
Starter
CLIActuator
Auto-configure
ToolsTest
Core
pom の記述が減る
![Page 22: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/22.jpg)
22
Auto-configure自動で Bean を準備してくれる CLI
Starter
Actuator
Auto-configure
Tools
起動が楽になるCore
アプリのモニタリングひな形をCLI ベースで作れる
Test開発効率を上げる便利ツール
jUnit のユーティリティ
![Page 23: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/23.jpg)
23
進化した設定の簡易化 - xmlStarter
CLIActuator
Auto-configure
ToolsTest
自動でBean を準備
Core
![Page 24: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/24.jpg)
24
進化した設定の簡易化 - annotationStarter
CLIActuator
Auto-configure
ToolsTest
自動でBean を準備
Core
![Page 25: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/25.jpg)
25
進化した設定の簡易化 – BootStarter
CLIActuator
Auto-configure
ToolsTest
自動でBean を準備
Core
![Page 26: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/26.jpg)
26
@ConditionalOnClass /BeanStarter
CLIActuator
Auto-configure
ToolsTest
自動でBean を準備
Core
@ConditionalOnClass
@ConditionalOnMissingClass
@ConditionalOnBean
@ConditionalOnMissingBean
実行時ビルド時@Bean@ComponentContext に○○ Bean があれば
ClassPath に○○クラスがあれば
Context に○○ Bean がなければ
ClassPath に○○クラスがなければ
Startersspring-boot-starter-xxx
![Page 27: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/27.jpg)
27
Actuatorアプリのモニタリング
![Page 28: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/28.jpg)
28
• Cloud Native なアプリを作るときに、Cloud がアプリのことを知るために必要なあるあるエンドポイント(ヘルスチェックやメトリックスなど)を自動的に用意してくれる• Spring Cloud フレンドリ• Cloud が Actuator のエンドポイント使ってる• Zool:reverse proxy
• Actuator の /route 使ってる
Actuator が使われる場面Starter
CLIActuator
Auto-configure
ToolsTest
Core
アプリのモニタリング
![Page 29: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/29.jpg)
29
Tools開発効率が上がるツール群 CLI
Starter
Actuator
Auto-configure
Tools
Core
Test
![Page 30: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/30.jpg)
30
• Automatic restart• LiveReload• 開発時のためのデフォルトプロパティ
DevtoolsStarter
CLIActuator
Auto-configure
Test
Core
Toolsお役立ちツール群
![Page 31: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/31.jpg)
31
• Spring の自動再起動• 2つのクラスローダー
• 再起動用• よく変更するクラス
• 非再起動用• 外部 Jar で読み込んでいる
クラスファイルなど• vs JRebel や Spring Loaded• Tomcat の再起動ではない
• DI コンテナ (=Spring) のリロード• よく変更するクラスファイルだけ再読込し
再起動• →Tomcat のリスタートよりかは速い
Automatic restart
spring
tomcat
jvm
Starter
CLIActuator
Auto-configure
ToolsTest
Core再起動用クラスローダー
非再起動用クラスローダー
ここだけ再起動
通常起動する場合
![Page 32: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/32.jpg)
32
• 自動でリロードしてくれるブラウザのプラグインに対応• 特定ポートに対してメッセージを送ってリロード• Spring Boot が LiveReload に対応してる
• ソースコード変更時に自分でリロードしなくても勝手にリロードして表示してくれる
LiveReloadStarter
CLIActuator
Auto-configure
Test
Core
Toolsお役立ちツール群
![Page 33: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/33.jpg)
33
• application.properties に設定を手動で記載しなくてもSpring Boot Devtools がデフォルトでセットしてくれる• 例:開発時はデフォルトでキャッシュ OFF
開発時のためのデフォルトプロパティStarter
CLIActuator
Auto-configure
Test
Core
Toolsお役立ちツール群
![Page 34: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/34.jpg)
34
• 地味にビルドを助けてくれるプラグイン• Maven プラグイン• maven コマンドで Spring boot をキックできる
• Gradle のプラグイン• Maven でしかできない記述がかける
• <Dependency management></>• <provided> 的なの
Maven / Gradle PluginStarter
CLIActuator
Auto-configure
Test
Core
Toolsお役立ちツール群
![Page 35: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/35.jpg)
35
まとめ
![Page 36: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/36.jpg)
36
Spring Boot のはじめかたIDESTS
IDEAEclipse
...
Initializerstart.spring.io
Buildtool
Maven
Starter @SpringBoot Application
jar
Code
TomcatCLIGradle
![Page 37: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/37.jpg)
37
• Spring Boot は劇的な変化をもたらすというよりかちょっとした改善の積み重ねで開発が楽になるもの• アイデアがグッド• クラウドサービスの登場によってエンタプライズ ( ミッショ
ンクリティカル ) だけじゃなくもっと幅広い層に使えるようになってきた• Java / Spring がもっと身近なものに。• PHP のお手軽さ以上のものを手にいれた
むすびに
![Page 38: さくっと理解するSpring bootの仕組み](https://reader033.fdocument.pub/reader033/viewer/2022052116/5899ab931a28ab30688b784f/html5/thumbnails/38.jpg)
Thank you!