Successfully reported this slideshow.
Your SlideShare is downloading. ×

Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 199 Ad

More Related Content

Slideshows for you (20)

Similar to Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug (20)

Advertisement

More from Toshiaki Maki (20)

Recently uploaded (20)

Advertisement

Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug

  1. 1. Spring 4とSpring Bootで作る 次世代Springアプリケーション JJUG ナイトセミナー 2014/01/21 槙 俊明 (@making)
  2. 2. 自己紹介 • @making • 大手SIerでR&D • JJUG幹事 • 金魚本(http://amzn.to/JavaEE6)を一部翻訳 • http://blog.ik.am • 公私ともにSpringユーザー http://terasoluna.org
  3. 3. 自己紹介 • @making • 大手SIerでR&D • JJUG幹事 • 金魚本(http://amzn.to/JavaEE6)を一部翻訳 昨年末にSpringのガイドライン • http://blog.ik.am • 公私ともにSpringユーザー http://terasoluna.org 公開しました
  4. 4. [宣伝] はじめてのBootstrap • なぜか畑違いのBootstrap3入門の本書きました • 初心者向けです • http://bit.ly/hajiboo
  5. 5. 会場を貸してくださったOracle さんありがとうございます!
  6. 6. Java EEも好きです! http://www.slideshare.net/makingx
  7. 7. 今日伝えたいこと • Spring Frameworkは楽しい!進化し 続けている! • Java EEとともにJavaフレームワー クの選択肢の1つとして考えてほしい
  8. 8. 今日のコンテンツ • Spring 4の紹介 (15分) • Spring Bootの紹介 (30分)
  9. 9. 今日のデモ • http://bit.ly/spring-boot-demo
  10. 10. 今日のデモ • http://bit.ly/spring-boot-demo ダウンロードして即実行可能!
  11. 11. http://spring.io
  12. 12. 今日のスコープ
  13. 13. 今日のスコープ 4.0.0.RELEASEリリース済み もうすぐ4.0.1.RELEASEリリース(Bug Fix版)
  14. 14. 今日のスコープ 0.5.0.M7リリース 絶賛開発中 4.0.0.RELEASEリリース済み もうすぐ4.0.1.RELEASEリリース(Bug Fix版)
  15. 15. Spring 4
  16. 16. Spring 4の新機能 • Java 8 • Java EE 7 • WebSocket, SockJS, and STOMP Messaging
  17. 17. Java 8サポート • Lamada式サポート • JSR-310サポート(@DateTimeFormat) • Repeatableアノテーションサポート
  18. 18. Lambdaサポート
  19. 19. Lambdaサポート
  20. 20. Lambdaサポート SpringにはTemplateパターン +コールバックな機能が多いの でラムダ式の恩恵が大きい!
  21. 21. Lambdaサポート method referenceもOK SpringにはTemplateパターン +コールバックな機能が多いの でラムダ式の恩恵が大きい!
  22. 22. JSR-310サポート
  23. 23. Repeatable Annotation
  24. 24. Repeatable Annotation JDK6+ JDK8
  25. 25. さらなるRESTサポート • @RestController • AsyncRestTemplate
  26. 26. @RestController No @ResponseBody
  27. 27. AsyncRestTemplate
  28. 28. AsyncRestTemplate
  29. 29. AsyncRestTemplate
  30. 30. Java EE 7サポート • JMS 2.0 • JTA 1.2 • JPA 2.1 • Bean Validation 1.1 • JSR-236 Concurrency Utilities
  31. 31. JTA 1.2サポート • @javax.transaction.Transactionalで宣言的トランザク ション管理 ! ! !
  32. 32. JTA 1.2サポート • @javax.transaction.Transactionalで宣言的トランザク ション管理 ! ! ! Java標準アノテーションのみ!
  33. 33. JSR-236 Concurrency Utilities サポート • org.springframework.scheduling.concurrent. • • • ConcurrentTaskExecutor DefaultManagedTaskExecutor javax.enterprise.concurrent.ManagedExecutorService を自動で検知
  34. 34. JSR-349 Bean Validation 1.1 サポート • メソッドバリデーション • @ConvertGroupでバリデーションルールのグループ化
  35. 35. JSR-349 Bean Validation 1.1 サポート • メソッドバリデーション • @ConvertGroupでバリデーションルールのグループ化 実はSpring3 (JSR-303対応版)から メソッドバリデーション グループ対応の独自機構はあった
  36. 36. WebSocket対応 • JSR-356サポート • Jetty, Tomcatの独自実装もサポート • レガシーブラウザ向けにSockJSサポート
  37. 37. JJUG CCC 2013 Fallの資料参照 http://www.slideshare.net/makingx/springframework-2013-jjugccc-cccr17
  38. 38. STOMPサポート • ハイレベルメッセージングプロトコル • TCPに対するHTTPみたいなプロトコル • @ControllerでSpring MVC likeにWebSocketプログラミ ングができる
  39. 39. デモ http://bit.ly/stomp-demo
  40. 40. デモ 接続 http://bit.ly/stomp-demo
  41. 41. デモ http://bit.ly/stomp-demo
  42. 42. デモ いいね! http://bit.ly/stomp-demo
  43. 43. デモ http://bit.ly/stomp-demo
  44. 44. CONNECTで接続
  45. 45. CONNECTで接続 SUBSCRIBEで特定の宛先メッ セージを購読
  46. 46. CONNECTで接続 SUBSCRIBEで特定の宛先メッ セージを購読 SENDでアプリケーションの宛先 へメッセージを送信
  47. 47. CONNECTで接続 SUBSCRIBEで特定の宛先メッ セージを購読 SENDでアプリケーションの宛先 へメッセージを送信 購読したメッセージが届く
  48. 48. Controllerクラス
  49. 49. Controllerクラス アプリケーションへの宛先
  50. 50. Controllerクラス アプリケーションへの宛先 メッセージ送り先
  51. 51. Controllerクラス アプリケーションへの宛先 メッセージ送り先 JSONにシリアライズされて購 読している全クライアントに送 信される
  52. 52. JavaConfigクラス
  53. 53. JavaConfigクラス アプリケーションへの 送信先のprefix
  54. 54. クライアント • 要stomp.js
  55. 55. クライアント • 要stomp.js CONNECT
  56. 56. クライアント
  57. 57. クライアント SUBSCRIBE
  58. 58. クライアント SUBSCRIBE 受信したら実行される コールバック
  59. 59. クライアント
  60. 60. クライアント メッセージ送信
  61. 61. 変更のあるAPI • http://docs.spring.io/spring-framework/docs/ 3.2.4.RELEASE_to_4.0.0.RELEASE/
  62. 62. 変更のあるAPI • http://docs.spring.io/spring-framework/docs/ 3.2.4.RELEASE_to_4.0.0.RELEASE/ 遂にStruts, iBatisサポートが削除されました!
  63. 63. 併せて読みたい http://rstoyanchev.github.io/webinar-websocket-spring http://spring.io/guides/gs/messaging-stomp-websocket/
  64. 64. Spring Boot
  65. 65. Spring Bootとは? • 一言でいうと • Springアプリケーションを迅速に開発するための仕組み
  66. 66. Spring Bootの背景 • DI x AOPで注目され、重厚なJ2EEのアンチテー ゼとして2004年に登場 ! !
  67. 67. Springのサブプトジェクト群 IDE Spring Tool Suite (STS) RAD Starter Spring Roo Web Spring Boot Spring XD Spring Data Rest Spring WebFlow Spring Security OAuth Spring MVC Spring Security Spring Mobile Social Big Data Security DataAccess Spring Hadoop Batch Spring Data MongoDB Spring Data JPA Spring Batch Enterprise Integration Spring Integration Core Spring DI Spring AOP Spring TX … Spring Social Github Spring Social Facebook Spring Social Twitter
  68. 68. Springのサブプトジェクト群 IDE Spring Tool Suite (STS) RAD 大杉! Spring Roo Web Spring XD Spring WebFlow Spring Security OAuth Spring MVC Spring Security Spring Mobile Spring Boot Social Big Data Security Spring Data Rest Starter DataAccess Spring Hadoop Batch Spring Data MongoDB Spring Data JPA Spring Batch Enterprise Integration Spring Integration Core Spring DI Spring AOP Spring TX … Spring Social Github Spring Social Facebook Spring Social Twitter
  69. 69. サブプロジェクトが どんどん増えJava EEより肥大化・・
  70. 70. そこで生まれたSpring Boot
  71. 71. Spring Bootの特徴 • サブプロジェクトの複雑な依存関係がまとめられ、 pom.xml or build.gradleがシンプルになる。 • あらかじめ各種設定済みでXMLが不要になる。 • Production Readyな非機能面のサポート • ”The Twelve-Factor App”で述べられるようなモダンな アプリケーションを作成できる。
  72. 72. まずは試す • pom.xmlに以下を追加
  73. 73. まずは試す • dependencyはこれだけ!
  74. 74. まずは試す • プラグイン追加
  75. 75. まずは試す • 正式リリースまではRepositoryを指定
  76. 76. まずは試す • pom.xml 全体 • https://gist.github.com/making/ 8487605 • Gradleでもちろんできる
  77. 77. まずは試す • エントリポイント作成
  78. 78. まずは試す • エントリポイント作成 自動設定を有効化
  79. 79. まずは試す • Controller作成
  80. 80. まずは試す • 実行 $ mvn packge $ java -jar target/demo-0.0.1-SNAPSHOT.jar
  81. 81. まずは試す • 実行 $ mvn packge $ java -jar target/demo-0.0.1-SNAPSHOT.jar jar!
  82. 82. Springのバナー表示
  83. 83. Springのバナー表示 色付きのログ出力
  84. 84. Springのバナー表示 色付きのログ出力 組み込みTomcat起動
  85. 85. Springのバナー表示 色付きのログ出力 組み込みTomcat起動
  86. 86. 必要なファイルはこれだけ!
  87. 87. 必要なファイルはこれだけ! XMLがない! (logback.xmlも web.xmlも)
  88. 88. Logback Jackson Tomcat SLF4J Spring Boot Spring 4
  89. 89. mainメソッド実行でももちろんOK
  90. 90. Spring Tool Suite 3.4を使うと楽
  91. 91. Spring Tool Suite 3.4を使うと楽
  92. 92. Spring Tool Suite 3.4を使うと楽
  93. 93. Spring Tool Suite 3.4を使うと楽
  94. 94. [参考] DropWizard • http://dropwizard.codahale.com/
  95. 95. http://www.thoughtworks.com/radar
  96. 96. http://www.thoughtworks.com/radar 注目のフレームワーク
  97. 97. Spring BootはDrop WizardのSpring版! (しかもSpring謹製)
  98. 98. Spring Tomcat/Jetty Spring MVC ThymeLeaf Hibernate Spring Data JPA Jackson Spring Security Spring Bootの主なスタック
  99. 99. Jetty Guice Hibernate JAX-RS(Jersey) Jackson JDBI FreeMaker/ Mustache 独自Authentication? [参考] DropWizardの主なスタック
  100. 100. 様々な自動設定群 • spring-boot-autoconfigureに自動設定が 組み込まれている
  101. 101. 様々な自動設定群 • org.springframework.boo t.autoconfigureパッケージ をチェック
  102. 102. 様々な自動設定群 • @EnableAutoConfigurationで読み込まれる設定は META-INF/spring.factoriesに列挙されている。追加可能
  103. 103. 自動設定の仕組み • @Conditional
  104. 104. 自動設定の仕組み • @Conditional 対象のクラスがクラスパス上に存在したら有効
  105. 105. 自動設定の仕組み • @Conditional 対象のクラスがクラスパス上に存在したら有効 対象のクラスのBeanがDIコンテナ上に 存在しなかったら有効
  106. 106. 自動設定の仕組み • @Conditional 対象のクラスがクラスパス上に存在したら有効 対象のクラスのBeanがDIコンテナ上に 存在しなかったら有効 <mvc:annotaion-driven />と同じ
  107. 107. 自動設定の仕組み • @Conditional 対象のクラスがクラスパス上に存在したら有効 対象のクラスのBeanがDIコンテナ上に 存在しなかったら有効 <mvc:annotaion-driven />と同じ プロパティファイルで変更可能
  108. 108. 例: Tomcatのデータソース自動生 成の流れ • META-INF/spring.factoriesに DataSourceAutoConfigurationが定義されている。
  109. 109. 例: Tomcatのデータソース自動生 成の流れ
  110. 110. 例: Tomcatのデータソース自動生 成の流れ EmbeddedDatabaseTypeがクラスパス上に存在したら有効 =spring-jdbc.jarが含まれていたら有効
  111. 111. 例: Tomcatのデータソース自動生 成の流れ
  112. 112. 例: Tomcatのデータソース自動生 成の流れ (1) o.a.t.j.p.DataSourceが存在して、
  113. 113. 例: Tomcatのデータソース自動生 成の流れ (1) o.a.t.j.p.DataSourceが存在して、 (2) javax.sql.DataSourceのBeanがDIコン テナ上に存在しなかったら
  114. 114. 例: Tomcatのデータソース自動生 成の流れ (1) o.a.t.j.p.DataSourceが存在して、 (2) javax.sql.DataSourceのBeanがDIコン テナ上に存在しなかったら (3) TomcatDataSourceConfigurationを importする
  115. 115. 例: Tomcatのデータソース自動生 成の流れ
  116. 116. 例: Tomcatのデータソース自動生 成の流れ DataSourceが生成され、DIコンテナに 登録される
  117. 117. 例: Tomcatのデータソース自動生 成の流れ
  118. 118. 例: Tomcatのデータソース自動生 成の流れ urlやusername等の設定情報はpropertieファイル からインジェクション可能
  119. 119. 例: Tomcatのデータソース自動生 成の流れ urlやusername等の設定情報はpropertieファイル からインジェクション可能 spring.datasource.url: xxx spring.datasource.username: xxx spring.datasource.password: xxx
  120. 120. 例: Tomcatのデータソース自動生 成の流れ
  121. 121. 例: Tomcatのデータソース自動生 成の流れ 自分で定義すれば自動設定は適用されない
  122. 122. ドキュメントが整備されるまではソー スを読んで設定内容を把握しよう
  123. 123. Production Readyな非機能面サポート • spring-boot-actuatorで各種メトリクス収集やヘルス チェックのためのEndpoint提供(REST API, JMX) • spring-boot-starter-securityでセキュリティ強化 • 開発・本番環境の設定を変更するための仕組み • などなど・・
  124. 124. spring-boot-actuator • GET /metrics • GET /health • GET /trace • GET /dump • POST /shutdown • GET /beans • GET /env • など・・・
  125. 125. GET /env •ユーザー名: demo、パスワード: demo •http://spring-boot-demo.herokuapp.com/env
  126. 126. GET /dump •ユーザー名: demo、パスワード: demo •http://spring-boot-demo.herokuapp.com/dump
  127. 127. GET /metrics •ユーザー名: demo、パスワード: demo •http://spring-boot-demo.herokuapp.com/metrics
  128. 128. Securityサポート • Spring Securityによる認証・認可 • Audit
  129. 129. SSHサーバー化 • spring-boot-actuatorで取得できた情報をSSHで公開 • デフォルトで2000番ポートにSSHDが起動する
  130. 130. $ ssh -p 2000 demo@localhost
  131. 131. The Twelve-Factor App • Herokuの人がまとめた、スケーラブルで継続的デプロイ可能なWeb アプリ/SaaSを構築するための方法論 • http://12factor.net/ • http://twelve-factor-ja.herokuapp.com/ (日本語訳)
  132. 132. The Twelve-Factor App • Spring BootやDropWizardではThe Twelve-Factor App で述べられているノウハウがいくつか実践されている
  133. 133. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 aaa.war bbb.war ccc.war
  134. 134. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 bbb.war ccc.war aaa.war
  135. 135. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 bbb.war ccc.war aaa.war
  136. 136. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war
  137. 137. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /aaa
  138. 138. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /aaa
  139. 139. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /bbb /aaa
  140. 140. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /bbb /aaa
  141. 141. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /ccc /bbb /aaa
  142. 142. アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /ccc /bbb /aaa
  143. 143. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ ccc.jar bbb.jar aaa.jar 8082 8081 8080
  144. 144. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080
  145. 145. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy
  146. 146. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /aaa
  147. 147. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /aaa
  148. 148. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /aaa
  149. 149. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /bbb /aaa
  150. 150. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /bbb /aaa
  151. 151. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /bbb /aaa
  152. 152. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /ccc /bbb /aaa
  153. 153. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /ccc /bbb /aaa
  154. 154. アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /ccc /bbb /aaa
  155. 155. Ctrl+CでGraceful Shutdown
  156. 156. Ctrl+CでGraceful Shutdown Ctrl+Cの後に
  157. 157. Ctrl+CでGraceful Shutdown Ctrl+Cの後に 後処理
  158. 158. PaaS Friendly! • Heroku • Procfile ! web: java $JAVA_OPTS -jar target/demo-1.0-SNAPSHOT.jar --server.port=$PORT ! • Deploy $ echo "java.runtime.version=1.8" > system.properties $ heroku create $ git push heroku master
  159. 159. “war” is over!
  160. 160. もちろんwar”も”作成できる
  161. 161. その他 • ViewはThymeleafをサポート • Property • CLI • Testサポート • DBマイグレーション • などなど!
  162. 162. Thymeleafサポート
  163. 163. Thymeleafサポート Spring4対応中
  164. 164. Thymeleafサポート Spring4対応中 JSPも使えるがあまり推奨しない
  165. 165. ThymeleafAutoconfiguration
  166. 166. classpath直下のtempaltes
  167. 167. Property • @ConfigurationProperties • コマンドライン引数 > ファイル > classpathの優先順 • Bean Validationもサポート • YAMLもサポート(snake-yaml.jarがあれば)
  168. 168. Property • @ConfigurationProperties • コマンドライン引数 > ファイル > classpathの優先順 • Bean Validationもサポート • YAMLもサポート(snake-yaml.jarがあれば) todo.maxCount
  169. 169. Property • classpath直下のapplication.properties
  170. 170. Property • classpath直下のapplication.properties 100
  171. 171. Property • ローカルファイルのapplication.properties
  172. 172. Property • ローカルファイルのapplication.properties 200
  173. 173. Property • コマンドライン引数
  174. 174. Property • コマンドライン引数 400
  175. 175. 開発方法 • mainメソッド実行? • IDEのAPサーバー連携機能?
  176. 176. APサーバーで実行してもOK
  177. 177. WTPもOK https://spring.io/guides/gs/convert-jar-to-war/
  178. 178. WTPもOK Tomcat 7.0.47+ https://spring.io/guides/gs/convert-jar-to-war/
  179. 179. mainメソッドを実行していたら・・・
  180. 180. 再起動したくない!
  181. 181. Spring Loaded • みなさんお待ちかねのHot Reloading • ダウンロード • http://dist.springframework.org/release/LOADED/ springloaded-1.1.4.jar $ java -javaagent:<pathTo>/springloaded-1.1.4.jar noverify SomeJavaClass
  182. 182. Spring Loaded • みなさんお待ちかねのHot Reloading • ダウンロード • http://dist.springframework.org/release/LOADED/ springloaded-1.1.4.jar $ java -javaagent:<pathTo>/springloaded-1.1.4.jar noverify SomeJavaClass Springに依存しない
  183. 183. 修正
  184. 184. 修正
  185. 185. 修正 再起動いらず
  186. 186. 【後日追記】Spring Boot Plugin • http://projects.spring.io/spring-boot/docs/spring-boottools/spring-boot-maven-plugin/README.html • mvn spring-boot:runでもアプリは起動し、src/main/ resources以下はhot refreshされます。ちょっとした Thymeleafやjavascriptのrefreshに便利
  187. 187. Spring is fun!
  188. 188. あわせて読みたい • http://www.slideshare.net/sbrannen/springframework-40-the-next-generation-softshake-2013 • http://presos.dsyer.com/decks/spring-boot-intro.html • 豊富なサンプル群 https://github.com/spring-projects/ spring-boot/tree/master/spring-boot-samples • チュートリアル群 https://spring.io/guides
  189. 189. まとめ • Spring Frameworkは楽しい!進化し 続けている! • Java EEとともにJavaフレームワー クの選択肢の1つとして考えてほしい
  190. 190. Spring Bootでモダンなアプリ を作りましょう!
  191. 191. ご清聴ありがとうございました!

×