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

  • View
    2.652

  • Download
    1

  • Category

    Software

Preview:

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!