38
ささささささささ Spring Boot ささささ JJUG ナナナナナナナ 2017.1.23 ナナナナナナナナナナナ ナナナナ

さくっと理解するSpring bootの仕組み

Embed Size (px)

Citation preview

Page 1: さくっと理解するSpring bootの仕組み

さくっと理解するSpring Boot のしくみJJUG ナイトセミナー2017.1.23株式会社タグバンガーズ小川岳史

Page 2: さくっと理解するSpring bootの仕組み

2

• 株式会社タグバンガーズ• JSUG スタッフ• Spring Lover (10 years)• Spring I/O, Spring One 参加• WallRide (OSS)• From 横浜

• TagBar

自己紹介

Page 3: さくっと理解するSpring bootの仕組み

3

Spring と Spring Boot の関係Spring Boot が改善する開発プロセスSpring Boot の構成要素

今日話すこと

Page 4: さくっと理解するSpring bootの仕組み

4

Spring と Spring Boot の関係

Page 5: さくっと理解するSpring bootの仕組み

5

そもそも Spring ってなに?

次のセッションで話しますSpring Spring Framework≒DI コンテナの機能を含むコアプロジェクト

今回話すプロジェクト

Page 6: さくっと理解するSpring bootの仕組み

6

• ざっくりいえば・・Spring と Spring Boot の関係

Spring から

面倒な設定を排除し

Tomcat を追加したものが・・

Spring Boot

SpringCONFIG

Page 7: さくっと理解するSpring bootの仕組み

Spring Boot が改善する開発プロセス

7

Page 8: さくっと理解するSpring bootの仕組み

8

一般的な開発のプロセス1. 必要なライブラリのリストアップ

5. モニタリング

2. 起動に必要な Bean の定義をする3. プログラミング4. パッケージング・デプロイ

Page 9: さくっと理解するSpring bootの仕組み

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の仕組み

10

2. 起動に必要な Bean の定義をするspring-boot-starter-xxxStarters

自分で Bean 定義

Container

自動で Bean を定義してくれる

AutoConfigure

Page 11: さくっと理解するSpring bootの仕組み

11

3. プログラミング

Tomcat 内包生産性が上がる

Page 12: さくっと理解するSpring bootの仕組み

12

4. パッケージング・デプロイ

$ ./app.jar

Fully Executable jar

Page 13: さくっと理解するSpring bootの仕組み

13

5. モニタリングAfter

エンドポイントの自動配備

Page 14: さくっと理解するSpring bootの仕組み

14

Spring Boot のしくみ

Page 15: さくっと理解するSpring bootの仕組み

15

Spring Boot の構成要素

CLI

Starter

Actuator

Auto-configure

Tools

起動が楽になるCore

ライブラリ同士のバージョン互換を解決自動で Bean を準備してくれる

アプリのモニタリングひな形をCLI ベースで作れる

Test開発効率を上げる便利ツール

JUnit のユーティリティ

Page 16: さくっと理解するSpring bootの仕組み

16

Core起動が簡単に! CLI

Starter

Actuator

Auto-configure

Tools

Core

Test

Page 17: さくっと理解するSpring bootの仕組み

17

Tomcat が内包されているStarter

Jetty, Undertow に置き換えできるTomcat 7 から組み込み版が対応→ Spring Boot がこれを組み込みした

CLIActuator

Auto-configure

ToolsTest

起動が楽になるCore

Page 18: さくっと理解するSpring bootの仕組み

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の仕組み

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の仕組み

20

Startersライブラリ同士のバージョン互換を解決 CLI

Starter

Actuator

Auto-configure

Tools

起動が楽になるCore

自動で Bean を準備してくれる

アプリのモニタリングひな形をCLI ベースで作れる

Test開発効率を上げる便利ツール

jUnit のユーティリティ

Page 21: さくっと理解するSpring bootの仕組み

21

• 実態は pom しかない• 自分で Starter をつくれるStarters の実態

Starter

CLIActuator

Auto-configure

ToolsTest

Core

pom の記述が減る

Page 22: さくっと理解するSpring bootの仕組み

22

Auto-configure自動で Bean を準備してくれる CLI

Starter

Actuator

Auto-configure

Tools

起動が楽になるCore

アプリのモニタリングひな形をCLI ベースで作れる

Test開発効率を上げる便利ツール

jUnit のユーティリティ

Page 23: さくっと理解するSpring bootの仕組み

23

進化した設定の簡易化 - xmlStarter

CLIActuator

Auto-configure

ToolsTest

自動でBean を準備

Core

Page 24: さくっと理解するSpring bootの仕組み

24

進化した設定の簡易化 - annotationStarter

CLIActuator

Auto-configure

ToolsTest

自動でBean を準備

Core

Page 25: さくっと理解するSpring bootの仕組み

25

進化した設定の簡易化 – BootStarter

CLIActuator

Auto-configure

ToolsTest

自動でBean を準備

Core

Page 26: さくっと理解するSpring bootの仕組み

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の仕組み

27

Actuatorアプリのモニタリング

Page 28: さくっと理解するSpring bootの仕組み

28

• Cloud Native なアプリを作るときに、Cloud がアプリのことを知るために必要なあるあるエンドポイント(ヘルスチェックやメトリックスなど)を自動的に用意してくれる• Spring Cloud フレンドリ• Cloud が Actuator のエンドポイント使ってる• Zool:reverse proxy

• Actuator の /route 使ってる

Actuator が使われる場面Starter

CLIActuator

Auto-configure

ToolsTest

Core

アプリのモニタリング

Page 29: さくっと理解するSpring bootの仕組み

29

Tools開発効率が上がるツール群 CLI

Starter

Actuator

Auto-configure

Tools

Core

Test

Page 30: さくっと理解するSpring bootの仕組み

30

• Automatic restart• LiveReload• 開発時のためのデフォルトプロパティ

DevtoolsStarter

CLIActuator

Auto-configure

Test

Core

Toolsお役立ちツール群

Page 31: さくっと理解するSpring bootの仕組み

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の仕組み

32

• 自動でリロードしてくれるブラウザのプラグインに対応• 特定ポートに対してメッセージを送ってリロード• Spring Boot が LiveReload に対応してる

• ソースコード変更時に自分でリロードしなくても勝手にリロードして表示してくれる

LiveReloadStarter

CLIActuator

Auto-configure

Test

Core

Toolsお役立ちツール群

Page 33: さくっと理解するSpring bootの仕組み

33

• application.properties に設定を手動で記載しなくてもSpring Boot Devtools がデフォルトでセットしてくれる• 例:開発時はデフォルトでキャッシュ OFF

開発時のためのデフォルトプロパティStarter

CLIActuator

Auto-configure

Test

Core

Toolsお役立ちツール群

Page 34: さくっと理解するSpring bootの仕組み

34

• 地味にビルドを助けてくれるプラグイン• Maven プラグイン• maven コマンドで Spring boot をキックできる

• Gradle のプラグイン• Maven でしかできない記述がかける

• <Dependency management></>• <provided> 的なの

Maven / Gradle PluginStarter

CLIActuator

Auto-configure

Test

Core

Toolsお役立ちツール群

Page 35: さくっと理解するSpring bootの仕組み

35

まとめ

Page 36: さくっと理解するSpring bootの仕組み

36

Spring Boot のはじめかたIDESTS

IDEAEclipse

...

Initializerstart.spring.io

Buildtool

Maven

Starter @SpringBoot Application

jar

Code

TomcatCLIGradle

Page 37: さくっと理解するSpring bootの仕組み

37

• Spring Boot は劇的な変化をもたらすというよりかちょっとした改善の積み重ねで開発が楽になるもの• アイデアがグッド• クラウドサービスの登場によってエンタプライズ ( ミッショ

ンクリティカル ) だけじゃなくもっと幅広い層に使えるようになってきた• Java / Spring がもっと身近なものに。• PHP のお手軽さ以上のものを手にいれた

むすびに

Page 38: さくっと理解するSpring bootの仕組み

Thank you!