• Like
  • Save
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 12,592 views

 

Statistics

Views

Total Views
12,592
Views on SlideShare
10,374
Embed Views
2,218

Actions

Likes
65
Downloads
96
Comments
1

19 Embeds 2,218

http://kikutaro777.hatenablog.com 1481
https://twitter.com 218
http://garbagetown.hatenablog.com 208
http://blog.ik.am 162
http://setys.hatenablog.com 71
http://feedly.com 30
http://t.co 13
https://www.chatwork.com 10
http://s.deeeki.com 9
http://192.168.33.10 5
http://slideshare-download.seesaa.net 2
https://www.facebook.com 2
https://www.linkedin.com 1
https://www.google.co.jp 1
https://m.facebook.com&_=1390482419854 HTTP 1
http://www.crowy.net 1
https://m.facebook.com&_=1390388904961 HTTP 1
http://geechscamp.lovepop.jp 1
https://m.facebook.com&_=1391236833666 HTTP 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Spring Boot 1.0では多少仕様がかわっていて、スライド中のコードそのままでは動かないので注意してください
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Spring 4とSpring Bootで作る 次世代Springアプリケーション JJUG ナイトセミナー 2014/01/21 槙 俊明 (@making)
    • 自己紹介 • @making • 大手SIerでR&D • JJUG幹事 • 金魚本(http://amzn.to/JavaEE6)を一部翻訳 • http://blog.ik.am • 公私ともにSpringユーザー http://terasoluna.org
    • 自己紹介 • @making • 大手SIerでR&D • JJUG幹事 • 金魚本(http://amzn.to/JavaEE6)を一部翻訳 昨年末にSpringのガイドライン • http://blog.ik.am • 公私ともにSpringユーザー http://terasoluna.org 公開しました
    • [宣伝] はじめてのBootstrap • なぜか畑違いのBootstrap3入門の本書きました • 初心者向けです • http://bit.ly/hajiboo
    • 会場を貸してくださったOracle さんありがとうございます!
    • Java EEも好きです! http://www.slideshare.net/makingx
    • 今日伝えたいこと • Spring Frameworkは楽しい!進化し 続けている! • Java EEとともにJavaフレームワー クの選択肢の1つとして考えてほしい
    • 今日のコンテンツ • Spring 4の紹介 (15分) • Spring Bootの紹介 (30分)
    • 今日のデモ • http://bit.ly/spring-boot-demo
    • 今日のデモ • http://bit.ly/spring-boot-demo ダウンロードして即実行可能!
    • http://spring.io
    • 今日のスコープ
    • 今日のスコープ 4.0.0.RELEASEリリース済み もうすぐ4.0.1.RELEASEリリース(Bug Fix版)
    • 今日のスコープ 0.5.0.M7リリース 絶賛開発中 4.0.0.RELEASEリリース済み もうすぐ4.0.1.RELEASEリリース(Bug Fix版)
    • Spring 4
    • Spring 4の新機能 • Java 8 • Java EE 7 • WebSocket, SockJS, and STOMP Messaging
    • Java 8サポート • Lamada式サポート • JSR-310サポート(@DateTimeFormat) • Repeatableアノテーションサポート
    • Lambdaサポート
    • Lambdaサポート
    • Lambdaサポート SpringにはTemplateパターン +コールバックな機能が多いの でラムダ式の恩恵が大きい!
    • Lambdaサポート method referenceもOK SpringにはTemplateパターン +コールバックな機能が多いの でラムダ式の恩恵が大きい!
    • JSR-310サポート
    • Repeatable Annotation
    • Repeatable Annotation JDK6+ JDK8
    • さらなるRESTサポート • @RestController • AsyncRestTemplate
    • @RestController No @ResponseBody
    • AsyncRestTemplate
    • AsyncRestTemplate
    • AsyncRestTemplate
    • Java EE 7サポート • JMS 2.0 • JTA 1.2 • JPA 2.1 • Bean Validation 1.1 • JSR-236 Concurrency Utilities
    • JTA 1.2サポート • @javax.transaction.Transactionalで宣言的トランザク ション管理 ! ! !
    • JTA 1.2サポート • @javax.transaction.Transactionalで宣言的トランザク ション管理 ! ! ! Java標準アノテーションのみ!
    • JSR-236 Concurrency Utilities サポート • org.springframework.scheduling.concurrent. • • • ConcurrentTaskExecutor DefaultManagedTaskExecutor javax.enterprise.concurrent.ManagedExecutorService を自動で検知
    • JSR-349 Bean Validation 1.1 サポート • メソッドバリデーション • @ConvertGroupでバリデーションルールのグループ化
    • JSR-349 Bean Validation 1.1 サポート • メソッドバリデーション • @ConvertGroupでバリデーションルールのグループ化 実はSpring3 (JSR-303対応版)から メソッドバリデーション グループ対応の独自機構はあった
    • WebSocket対応 • JSR-356サポート • Jetty, Tomcatの独自実装もサポート • レガシーブラウザ向けにSockJSサポート
    • JJUG CCC 2013 Fallの資料参照 http://www.slideshare.net/makingx/springframework-2013-jjugccc-cccr17
    • STOMPサポート • ハイレベルメッセージングプロトコル • TCPに対するHTTPみたいなプロトコル • @ControllerでSpring MVC likeにWebSocketプログラミ ングができる
    • デモ http://bit.ly/stomp-demo
    • デモ 接続 http://bit.ly/stomp-demo
    • デモ http://bit.ly/stomp-demo
    • デモ いいね! http://bit.ly/stomp-demo
    • デモ http://bit.ly/stomp-demo
    • CONNECTで接続
    • CONNECTで接続 SUBSCRIBEで特定の宛先メッ セージを購読
    • CONNECTで接続 SUBSCRIBEで特定の宛先メッ セージを購読 SENDでアプリケーションの宛先 へメッセージを送信
    • CONNECTで接続 SUBSCRIBEで特定の宛先メッ セージを購読 SENDでアプリケーションの宛先 へメッセージを送信 購読したメッセージが届く
    • Controllerクラス
    • Controllerクラス アプリケーションへの宛先
    • Controllerクラス アプリケーションへの宛先 メッセージ送り先
    • Controllerクラス アプリケーションへの宛先 メッセージ送り先 JSONにシリアライズされて購 読している全クライアントに送 信される
    • JavaConfigクラス
    • JavaConfigクラス アプリケーションへの 送信先のprefix
    • クライアント • 要stomp.js
    • クライアント • 要stomp.js CONNECT
    • クライアント
    • クライアント SUBSCRIBE
    • クライアント SUBSCRIBE 受信したら実行される コールバック
    • クライアント
    • クライアント メッセージ送信
    • 変更のあるAPI • http://docs.spring.io/spring-framework/docs/ 3.2.4.RELEASE_to_4.0.0.RELEASE/
    • 変更のあるAPI • http://docs.spring.io/spring-framework/docs/ 3.2.4.RELEASE_to_4.0.0.RELEASE/ 遂にStruts, iBatisサポートが削除されました!
    • 併せて読みたい http://rstoyanchev.github.io/webinar-websocket-spring http://spring.io/guides/gs/messaging-stomp-websocket/
    • Spring Boot
    • Spring Bootとは? • 一言でいうと • Springアプリケーションを迅速に開発するための仕組み
    • Spring Bootの背景 • DI x AOPで注目され、重厚なJ2EEのアンチテー ゼとして2004年に登場 ! !
    • 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
    • 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
    • サブプロジェクトが どんどん増えJava EEより肥大化・・
    • そこで生まれたSpring Boot
    • Spring Bootの特徴 • サブプロジェクトの複雑な依存関係がまとめられ、 pom.xml or build.gradleがシンプルになる。 • あらかじめ各種設定済みでXMLが不要になる。 • Production Readyな非機能面のサポート • ”The Twelve-Factor App”で述べられるようなモダンな アプリケーションを作成できる。
    • まずは試す • pom.xmlに以下を追加
    • まずは試す • dependencyはこれだけ!
    • まずは試す • プラグイン追加
    • まずは試す • 正式リリースまではRepositoryを指定
    • まずは試す • pom.xml 全体 • https://gist.github.com/making/ 8487605 • Gradleでもちろんできる
    • まずは試す • エントリポイント作成
    • まずは試す • エントリポイント作成 自動設定を有効化
    • まずは試す • Controller作成
    • まずは試す • 実行 $ mvn packge $ java -jar target/demo-0.0.1-SNAPSHOT.jar
    • まずは試す • 実行 $ mvn packge $ java -jar target/demo-0.0.1-SNAPSHOT.jar jar!
    • Springのバナー表示
    • Springのバナー表示 色付きのログ出力
    • Springのバナー表示 色付きのログ出力 組み込みTomcat起動
    • Springのバナー表示 色付きのログ出力 組み込みTomcat起動
    • 必要なファイルはこれだけ!
    • 必要なファイルはこれだけ! XMLがない! (logback.xmlも web.xmlも)
    • Logback Jackson Tomcat SLF4J Spring Boot Spring 4
    • mainメソッド実行でももちろんOK
    • Spring Tool Suite 3.4を使うと楽
    • Spring Tool Suite 3.4を使うと楽
    • Spring Tool Suite 3.4を使うと楽
    • Spring Tool Suite 3.4を使うと楽
    • [参考] DropWizard • http://dropwizard.codahale.com/
    • http://www.thoughtworks.com/radar
    • http://www.thoughtworks.com/radar 注目のフレームワーク
    • Spring BootはDrop WizardのSpring版! (しかもSpring謹製)
    • Spring Tomcat/Jetty Spring MVC ThymeLeaf Hibernate Spring Data JPA Jackson Spring Security Spring Bootの主なスタック
    • Jetty Guice Hibernate JAX-RS(Jersey) Jackson JDBI FreeMaker/ Mustache 独自Authentication? [参考] DropWizardの主なスタック
    • 様々な自動設定群 • spring-boot-autoconfigureに自動設定が 組み込まれている
    • 様々な自動設定群 • org.springframework.boo t.autoconfigureパッケージ をチェック
    • 様々な自動設定群 • @EnableAutoConfigurationで読み込まれる設定は META-INF/spring.factoriesに列挙されている。追加可能
    • 自動設定の仕組み • @Conditional
    • 自動設定の仕組み • @Conditional 対象のクラスがクラスパス上に存在したら有効
    • 自動設定の仕組み • @Conditional 対象のクラスがクラスパス上に存在したら有効 対象のクラスのBeanがDIコンテナ上に 存在しなかったら有効
    • 自動設定の仕組み • @Conditional 対象のクラスがクラスパス上に存在したら有効 対象のクラスのBeanがDIコンテナ上に 存在しなかったら有効 <mvc:annotaion-driven />と同じ
    • 自動設定の仕組み • @Conditional 対象のクラスがクラスパス上に存在したら有効 対象のクラスのBeanがDIコンテナ上に 存在しなかったら有効 <mvc:annotaion-driven />と同じ プロパティファイルで変更可能
    • 例: Tomcatのデータソース自動生 成の流れ • META-INF/spring.factoriesに DataSourceAutoConfigurationが定義されている。
    • 例: Tomcatのデータソース自動生 成の流れ
    • 例: Tomcatのデータソース自動生 成の流れ EmbeddedDatabaseTypeがクラスパス上に存在したら有効 =spring-jdbc.jarが含まれていたら有効
    • 例: Tomcatのデータソース自動生 成の流れ
    • 例: Tomcatのデータソース自動生 成の流れ (1) o.a.t.j.p.DataSourceが存在して、
    • 例: Tomcatのデータソース自動生 成の流れ (1) o.a.t.j.p.DataSourceが存在して、 (2) javax.sql.DataSourceのBeanがDIコン テナ上に存在しなかったら
    • 例: Tomcatのデータソース自動生 成の流れ (1) o.a.t.j.p.DataSourceが存在して、 (2) javax.sql.DataSourceのBeanがDIコン テナ上に存在しなかったら (3) TomcatDataSourceConfigurationを importする
    • 例: Tomcatのデータソース自動生 成の流れ
    • 例: Tomcatのデータソース自動生 成の流れ DataSourceが生成され、DIコンテナに 登録される
    • 例: Tomcatのデータソース自動生 成の流れ
    • 例: Tomcatのデータソース自動生 成の流れ urlやusername等の設定情報はpropertieファイル からインジェクション可能
    • 例: Tomcatのデータソース自動生 成の流れ urlやusername等の設定情報はpropertieファイル からインジェクション可能 spring.datasource.url: xxx spring.datasource.username: xxx spring.datasource.password: xxx
    • 例: Tomcatのデータソース自動生 成の流れ
    • 例: Tomcatのデータソース自動生 成の流れ 自分で定義すれば自動設定は適用されない
    • ドキュメントが整備されるまではソー スを読んで設定内容を把握しよう
    • Production Readyな非機能面サポート • spring-boot-actuatorで各種メトリクス収集やヘルス チェックのためのEndpoint提供(REST API, JMX) • spring-boot-starter-securityでセキュリティ強化 • 開発・本番環境の設定を変更するための仕組み • などなど・・
    • spring-boot-actuator • GET /metrics • GET /health • GET /trace • GET /dump • POST /shutdown • GET /beans • GET /env • など・・・
    • GET /env •ユーザー名: demo、パスワード: demo •http://spring-boot-demo.herokuapp.com/env
    • GET /dump •ユーザー名: demo、パスワード: demo •http://spring-boot-demo.herokuapp.com/dump
    • GET /metrics •ユーザー名: demo、パスワード: demo •http://spring-boot-demo.herokuapp.com/metrics
    • Securityサポート • Spring Securityによる認証・認可 • Audit
    • SSHサーバー化 • spring-boot-actuatorで取得できた情報をSSHで公開 • デフォルトで2000番ポートにSSHDが起動する
    • $ ssh -p 2000 demo@localhost
    • The Twelve-Factor App • Herokuの人がまとめた、スケーラブルで継続的デプロイ可能なWeb アプリ/SaaSを構築するための方法論 • http://12factor.net/ • http://twelve-factor-ja.herokuapp.com/ (日本語訳)
    • The Twelve-Factor App • Spring BootやDropWizardではThe Twelve-Factor App で述べられているノウハウがいくつか実践されている
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 aaa.war bbb.war ccc.war
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 bbb.war ccc.war aaa.war
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 bbb.war ccc.war aaa.war
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /aaa
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /aaa
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /bbb /aaa
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /bbb /aaa
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /ccc /bbb /aaa
    • アプリケーションのデプロイ方法 • 従来のデプロイ AP Server: 8080 ccc.war bbb.war aaa.war /ccc /bbb /aaa
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ ccc.jar bbb.jar aaa.jar 8082 8081 8080
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /aaa
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /aaa
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /aaa
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /bbb /aaa
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /bbb /aaa
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /bbb /aaa
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /ccc /bbb /aaa
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /ccc /bbb /aaa
    • アプリケーションのデプロイ方法 • Spring BootやDropWizardのデプロイ Webアプリをプロセスとして起動 ccc.jar bbb.jar aaa.jar 8082 8081 8080 Reverse Proxy /ccc /bbb /aaa
    • Ctrl+CでGraceful Shutdown
    • Ctrl+CでGraceful Shutdown Ctrl+Cの後に
    • Ctrl+CでGraceful Shutdown Ctrl+Cの後に 後処理
    • 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
    • “war” is over!
    • もちろんwar”も”作成できる
    • その他 • ViewはThymeleafをサポート • Property • CLI • Testサポート • DBマイグレーション • などなど!
    • Thymeleafサポート
    • Thymeleafサポート Spring4対応中
    • Thymeleafサポート Spring4対応中 JSPも使えるがあまり推奨しない
    • ThymeleafAutoconfiguration
    • classpath直下のtempaltes
    • Property • @ConfigurationProperties • コマンドライン引数 > ファイル > classpathの優先順 • Bean Validationもサポート • YAMLもサポート(snake-yaml.jarがあれば)
    • Property • @ConfigurationProperties • コマンドライン引数 > ファイル > classpathの優先順 • Bean Validationもサポート • YAMLもサポート(snake-yaml.jarがあれば) todo.maxCount
    • Property • classpath直下のapplication.properties
    • Property • classpath直下のapplication.properties 100
    • Property • ローカルファイルのapplication.properties
    • Property • ローカルファイルのapplication.properties 200
    • Property • コマンドライン引数
    • Property • コマンドライン引数 400
    • 開発方法 • mainメソッド実行? • IDEのAPサーバー連携機能?
    • APサーバーで実行してもOK
    • WTPもOK https://spring.io/guides/gs/convert-jar-to-war/
    • WTPもOK Tomcat 7.0.47+ https://spring.io/guides/gs/convert-jar-to-war/
    • mainメソッドを実行していたら・・・
    • 再起動したくない!
    • 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 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に依存しない
    • 修正
    • 修正
    • 修正 再起動いらず
    • 【後日追記】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に便利
    • Spring is fun!
    • あわせて読みたい • 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
    • まとめ • Spring Frameworkは楽しい!進化し 続けている! • Java EEとともにJavaフレームワー クの選択肢の1つとして考えてほしい
    • Spring Bootでモダンなアプリ を作りましょう!
    • ご清聴ありがとうございました!