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