[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
SlideShare a Scribd company logo
さくっと理解する
Spring Boot のしくみ
JJUG ナイトセミナー
2017.1.23
株式会社タグバンガーズ
小川岳史
• 株式会社タグバンガーズ
• JSUG スタッフ
• Spring Lover (10 years)
• Spring I/O, Spring One 参加
• WallRide (OSS)
• From 横浜
• TagBar
自己紹介
1
Spring と Spring Boot の関係
Spring Boot が改善する開発プロセス
Spring Boot の構成要素
今日話すこと
2
Spring と Spring Boot の関係
3
そもそも Spring ってなに?
4
次のセッションで話します
Spring ≒ Spring Framework
DIコンテナの機能を含む
コアプロジェクト
今回話すプロジェクト
• ざっくりいえば・・
Spring と Spring Boot の関係
5
Spring から
面倒な設定を排除し
Tomcatを追加したもの
が・・
Spring Boot
Spring
CONFIG
Spring Boot が改善する
開発プロセス
6
一般的な開発のプロセス
7
1. 必要なライブラリのリストアップ
5. モニタリング
2. 起動に必要な Bean の定義をする
3. プログラミング
4. パッケージング・デプロイ
1. 必要なライブラリをリストアップ
8
<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
2.起動に必要な Bean の定義をする
9
spring-boot-starter-xxx
Starters
自分でBean定義
Container
自動で Bean を定義してくれる
AutoConfigure
3. プログラミング
10
Tomcat 内包
生産性が上がる
4. パッケージング・デプロイ
11
$ ./app.jar
Fully Executable jar
5. モニタリング
12
After
エンドポイントの自動配備
Spring Boot のしくみ
13
Spring Boot の構成要素
14
CLI
Starter
Actuator
Auto-configure
Tools
起動が楽になる
Core
ライブラリ同士の
バージョン互換を
解決
自動でBeanを
準備してくれる
アプリの
モニタリング
ひな形を
CLI ベースで
作れる
Test
開発効率を
上げる
便利ツール
JUnit の
ユーティリティ
Core
起動が簡単に!
15
CLI
Starter
Actuator
Auto-configure
Tools
Core
Test
Tomcatが内包されている
16
Starter
Jetty, Undertow に置き換えできる
Tomcat 7 から組み込み版が対応
→ Spring Boot がこれを組み込みした
CLI
Actuator
Auto-configure
Tools
Test
起動が
楽になる
Core
• バイナリ1+コマンド1発で起動したい
• が、Java はネストした jar を用意していない
• よくある対応策 … uber jar (fat jar)
• jar の中のコンテンツを全て展開してもう一度まとめる
• 問題点
• どのコンテンツがどのものかわからない
• jar 内のコンテンツ名前がかぶる可能性がある
• Spring Boot が作成する jar … Nested jar
• uber jar (fat jar) ではない
• 特殊なローダーに内包することでネストした jar を作っている
Fully Executable Jar
17
Starter
CLI
Actuator
Auto-configure
Tools
Test
起動が
楽になる
Core
Executableにするには設定が必要
Maven
Fully Executable Jar 2
18
Starter
CLI
Actuator
Auto-configure
Tools
Test
起動が
楽になる
Core
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
springBoot {
executable = true
}
Gradle
Starters
ライブラリ同士のバージョン互換
を解決
19
CLI
Starter
Actuator
Auto-configure
Tools
起動が楽になる
Core
自動でBeanを
準備してくれる
アプリの
モニタリング
ひな形を
CLI ベースで
作れる
Test
開発効率を
上げる
便利ツール
jUnit の
ユーティリティ
• 実態はpomしかない
• 自分で Starterをつくれる
Starters の実態
20
Starter
CLI
Actuator
Auto-configure
Tools
Test
Core
pom の
記述が減る
Auto-configure
自動でBeanを準備してくれる
21
CLI
Starter
Actuator
Auto-
configure
Tools
起動が楽になる
Core
アプリの
モニタリング
ひな形を
CLI ベースで
作れる
Test
開発効率を
上げる
便利ツール
jUnit の
ユーティリティ
進化した設定の簡易化 - xml
22
Starter
CLI
Actuator
Auto-configure
Tools
Test
自動で
Beanを
準備
Core
進化した設定の簡易化 - annotation
23
Starter
CLI
Actuator
Auto-configure
Tools
Test
自動で
Beanを
準備
Core
進化した設定の簡易化 – Boot
24
Starter
CLI
Actuator
Auto-configure
Tools
Test
自動で
Beanを
準備
Core
@ConditionalOnClass /Bean
25
Starter
CLI
Actuator
Auto-configure
Tools
Test
自動で
Beanを
準備
Core
@ConditionalOnClass
@ConditionalOnMissingClass
@ConditionalOnBean
@ConditionalOnMissingBean
実行時ビルド時@Bean
@Component
Context に○○ Bean があれば
ClassPath に○○クラスがあれば
Context に○○Bean がなければ
ClassPath に○○クラスがなければ
Starters
spring-boot-starter-xxx
Actuator
アプリのモニタリング
26
• Cloud Nativeなアプリを作るときに、
Cloudがアプリのことを知るために必要な
あるあるエンドポイント(ヘルスチェックや
メトリックスなど)を自動的に用意してくれる
• Spring Cloudフレンドリ
• CloudがActuatorのエンドポイント使ってる
• Zool:reverse proxy
• Actuatorの/route 使ってる
Actuator が使われる場面
27
Starter
CLI
Actuator
Auto-configure
Tools
Test
Core
アプリの
モニタリング
Tools
開発効率が上がるツール群
28
CLI
Starter
Actuator
Auto-configure
Tools
Core
Test
• Automatic restart
• LiveReload
• 開発時のためのデフォルトプロパティ
Devtools
29
Starter
CLI
Actuator
Auto-configure
Test
Core
Tools
お役立ち
ツール群
• Springの自動再起動
• 2つのクラスローダー
• 再起動用
• よく変更するクラス
• 非再起動用
• 外部Jarで読み込んでいる
クラスファイルなど
• vs JRebel や Spring Loaded
• Tomcatの再起動ではない
• DI コンテナ(=Spring)のリロード
• よく変更するクラスファイルだけ再読込し
再起動
• →Tomcatのリスタートよりかは速い
Automatic restart
30
spring
tomcat
jvm
Starter
CLI
Actuator
Auto-configure
Tools
Test
Core
再起動用
クラスローダー
非再起動用
クラスローダー
ここだけ再起動
通常起動する場合
• 自動でリロードしてくれるブラウザの
プラグインに対応
• 特定ポートに対してメッセージを送ってリロード
• Spring BootがLiveReloadに対応してる
• ソースコード変更時に自分でリロードしなくても
勝手にリロードして表示してくれる
LiveReload
31
Starter
CLI
Actuator
Auto-configure
Test
Core
Tools
お役立ち
ツール群
• application.properties に
設定を手動で記載しなくても
Spring Boot Devtools がデフォルトで
セットしてくれる
• 例:開発時はデフォルトでキャッシュOFF
開発時のためのデフォルトプロパティ
32
Starter
CLI
Actuator
Auto-configure
Test
Core
Tools
お役立ち
ツール群
• 地味にビルドを助けてくれるプラグイン
• Mavenプラグイン
• mavenコマンドでSpring bootをキックできる
• Gradleのプラグイン
• Mavenでしかできない記述がかける
• <Dependency management></>
• <provided> 的なの
Maven / Gradle Plugin
33
Starter
CLI
Actuator
Auto-configure
Test
Core
Tools
お役立ち
ツール群
まとめ
34
Spring Boot のはじめかた
35
IDE
STS
IDEA
Eclipse
...
Initializer
start.spring.io
Build
tool
Maven
Starter @SpringBoot
Application
jar
Code
Tomcat
CLI
Gradle
• Spring Boot は劇的な変化をもたらすというよりかちょっとし
た改善の積み重ねで開発が楽になるもの
• アイデアがグッド
• クラウドサービスの登場によってエンタプライズ(ミッションク
リティカル)だけじゃなくもっと幅広い層に使えるようになって
きた
• Java / Spring がもっと身近なものに。
• PHPのお手軽さ以上のものを手にいれた
むすびに
36
Thank you!

More Related Content

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

Editor's Notes

  1. Spring と一言でいっても・・・ いくつものプロジェクトで成り立っている