Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

34,628 views

Published on

【東京】JJUG ナイト・セミナー 「入門Spring Boot&Spring Cloud」 1/23(月)、JSUG共催

Published in: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

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

×