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 4とSpring Bootで作る
次世代Springアプリケーション
JJUG ナイトセミナー
2014/01/21
槙 俊明 (@making)
自己紹介
•

@making

•

大手SIerでR&D

•

JJUG幹事

•

金魚本(http://amzn.to/JavaEE6)を一部翻訳

•

http://blog.ik.am

•

公私ともにSpringユーザー h...
自己紹介
•

@making

•

大手SIerでR&D

•

JJUG幹事

•

金魚本(http://amzn.to/JavaEE6)を一部翻訳
昨年末にSpringのガイドライン

•

http://blog.ik.am

•
...
[宣伝] はじめての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
DefaultMan...
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...
Springのサブプトジェクト群
IDE
Spring Tool Suite (STS)
RAD

大杉!

Spring Roo
Web

Spring XD

Spring WebFlow

Spring
Security

OAuth

...
サブプロジェクトが
どんどん増えJava EEより肥大化・・
そこで生まれたSpring Boot
Spring Bootの特徴
•

サブプロジェクトの複雑な依存関係がまとめられ、
pom.xml or build.gradleがシンプルになる。

•

あらかじめ各種設定済みでXMLが不要になる。

•

Production Ready...
まずは試す
•

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) TomcatDataSou...
例: Tomcatのデータソース自動生
成の流れ
例: Tomcatのデータソース自動生
成の流れ
DataSourceが生成され、DIコンテナに
登録される
例: Tomcatのデータソース自動生
成の流れ
例: Tomcatのデータソース自動生
成の流れ
urlやusername等の設定情報はpropertieファイル
からインジェクション可能
例: Tomcatのデータソース自動生
成の流れ
urlやusername等の設定情報はpropertieファイル
からインジェクション可能

spring.datasource.url: xxx
spring.datasource.usern...
例: Tomcatのデータソース自動生
成の流れ
例: Tomcatのデータソース自動生
成の流れ

自分で定義すれば自動設定は適用されない
ドキュメントが整備されるまではソー
スを読んで設定内容を把握しよう
Production Readyな非機能面サポート
•

spring-boot-actuatorで各種メトリクス収集やヘルス
チェックのためのEndpoint提供(REST API, JMX)

•

spring-boot-starter-...
spring-boot-actuator
•

GET /metrics

•

GET /health

•

GET /trace

•

GET /dump

•

POST /shutdown

•

GET /beans

•

GE...
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...
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 Prox...
アプリケーションのデプロイ方法
•

Spring BootやDropWizardのデプロイ

Webアプリをプロセスとして起動
ccc.jar

bbb.jar

aaa.jar

8082

8081

8080

Reverse Prox...
アプリケーションのデプロイ方法
•

Spring BootやDropWizardのデプロイ

Webアプリをプロセスとして起動
ccc.jar

bbb.jar

aaa.jar

8082

8081

8080

Reverse Prox...
アプリケーションのデプロイ方法
•

Spring BootやDropWizardのデプロイ

Webアプリをプロセスとして起動
ccc.jar

bbb.jar

aaa.jar

8082

8081

8080

Reverse Prox...
アプリケーションのデプロイ方法
•

Spring BootやDropWizardのデプロイ

Webアプリをプロセスとして起動
ccc.jar

bbb.jar

aaa.jar

8082

8081

8080

Reverse Prox...
アプリケーションのデプロイ方法
•

Spring BootやDropWizardのデプロイ

Webアプリをプロセスとして起動
ccc.jar

bbb.jar

aaa.jar

8082

8081

8080

Reverse Prox...
アプリケーションのデプロイ方法
•

Spring BootやDropWizardのデプロイ

Webアプリをプロセスとして起動
ccc.jar

bbb.jar

aaa.jar

8082

8081

8080

Reverse Prox...
アプリケーションのデプロイ方法
•

Spring BootやDropWizardのデプロイ

Webアプリをプロセスとして起動
ccc.jar

bbb.jar

aaa.jar

8082

8081

8080

Reverse Prox...
アプリケーションのデプロイ方法
•

Spring BootやDropWizardのデプロイ

Webアプリをプロセスとして起動
ccc.jar

bbb.jar

aaa.jar

8082

8081

8080

Reverse Prox...
アプリケーションのデプロイ方法
•

Spring BootやDropWizardのデプロイ

Webアプリをプロセスとして起動
ccc.jar

bbb.jar

aaa.jar

8082

8081

8080

Reverse Prox...
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
!

•

De...
“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...
Property
•

@ConfigurationProperties

•

コマンドライン引数 > ファイル > classpathの優先順

•

Bean Validationもサポート

•

YAMLもサポート(snake-yaml...
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....
Spring Loaded
•

みなさんお待ちかねのHot Reloading

•

ダウンロード
•

http://dist.springframework.org/release/LOADED/
springloaded-1.1.4....
修正
修正
修正

再起動いらず
【後日追記】Spring Boot Plugin

•

http://projects.spring.io/spring-boot/docs/spring-boottools/spring-boot-maven-plugin/README.h...
Spring is fun!
あわせて読みたい
•

http://www.slideshare.net/sbrannen/springframework-40-the-next-generation-softshake-2013

•

http://presos.dsy...
まとめ
•

Spring Frameworkは楽しい!進化し
続けている!

•

Java EEとともにJavaフレームワー
クの選択肢の1つとして考えてほしい
Spring Bootでモダンなアプリ
を作りましょう!
ご清聴ありがとうございました!
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Upcoming SlideShare
Loading in …5
×

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

35,418 views

Published on

Published in: Technology
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { https://urlzs.com/UABbn } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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. ご清聴ありがとうございました!

×