spring4とspring bootで作る次世代springアプリケーション #jjug #jsug

199
Spring 4 Spring Boot で作る 次世代 Spring アプリケーション JJUG ナイトセミナー 2014/01/21 俊明 (@making)

Upload: toshiaki-maki

Post on 10-May-2015

20.535 views

Category:

Technology


11 download

TRANSCRIPT

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

Spring 4とSpring Bootで作る 次世代Springアプリケーション

JJUG ナイトセミナー 2014/01/21

槙 俊明 (@making)

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

自己紹介• @making

• 大手SIerでR&D

• JJUG幹事

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

• http://blog.ik.am

• 公私ともにSpringユーザー http://terasoluna.org

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

自己紹介• @making

• 大手SIerでR&D

• JJUG幹事

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

• http://blog.ik.am

• 公私ともにSpringユーザー http://terasoluna.org

昨年末にSpringのガイドライン公開しました

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

[宣伝] はじめてのBootstrap• なぜか畑違いのBootstrap3入門の本書きました

• 初心者向けです

• http://bit.ly/hajiboo

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

会場を貸してくださったOracleさんありがとうございます!

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

Java EEも好きです!

http://www.slideshare.net/makingx

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

今日伝えたいこと

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

• Java EEとともにJavaフレームワークの選択肢の1つとして考えてほしい

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

今日のコンテンツ

• Spring 4の紹介 (15分)

• Spring Bootの紹介 (30分)

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

今日のデモ• http://bit.ly/spring-boot-demo

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

今日のデモ• http://bit.ly/spring-boot-demo

ダウンロードして即実行可能!

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

http://spring.io

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

今日のスコープ

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

今日のスコープ

4.0.0.RELEASEリリース済み もうすぐ4.0.1.RELEASEリリース(Bug Fix版)

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

今日のスコープ

0.5.0.M7リリース 絶賛開発中

4.0.0.RELEASEリリース済み もうすぐ4.0.1.RELEASEリリース(Bug Fix版)

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

Spring 4

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

Spring 4の新機能• Java 8

• Java EE 7

• WebSocket, SockJS, and STOMP Messaging

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

Java 8サポート• Lamada式サポート

• JSR-310サポート(@DateTimeFormat)

• Repeatableアノテーションサポート

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

Lambdaサポート

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

Lambdaサポート

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

Lambdaサポート

SpringにはTemplateパターン+コールバックな機能が多いのでラムダ式の恩恵が大きい!

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

Lambdaサポート

SpringにはTemplateパターン+コールバックな機能が多いのでラムダ式の恩恵が大きい!

method referenceもOK

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

JSR-310サポート

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

Repeatable Annotation

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

Repeatable Annotation

JDK6+

JDK8

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

さらなるRESTサポート

• @RestController

• AsyncRestTemplate

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

@RestController

No @ResponseBody

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

AsyncRestTemplate

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

AsyncRestTemplate

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

AsyncRestTemplate

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

Java EE 7サポート

• JMS 2.0

• JTA 1.2

• JPA 2.1

• Bean Validation 1.1

• JSR-236 Concurrency Utilities

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

JTA 1.2サポート• @javax.transaction.Transactionalで宣言的トランザクション管理

!

!

!

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

JTA 1.2サポート• @javax.transaction.Transactionalで宣言的トランザクション管理

!

!

!

Java標準アノテーションのみ!

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

• org.springframework.scheduling.concurrent.

• ConcurrentTaskExecutor

• DefaultManagedTaskExecutor

• javax.enterprise.concurrent.ManagedExecutorServiceを自動で検知

JSR-236 Concurrency Utilitiesサポート

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

JSR-349 Bean Validation 1.1 サポート

• メソッドバリデーション

• @ConvertGroupでバリデーションルールのグループ化

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

JSR-349 Bean Validation 1.1 サポート

• メソッドバリデーション

• @ConvertGroupでバリデーションルールのグループ化

実はSpring3 (JSR-303対応版)から メソッドバリデーション

グループ対応の独自機構はあった

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

WebSocket対応• JSR-356サポート

• Jetty, Tomcatの独自実装もサポート

• レガシーブラウザ向けにSockJSサポート

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

JJUG CCC 2013 Fallの資料参照

http://www.slideshare.net/makingx/spring-framework-2013-jjugccc-cccr17

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

STOMPサポート• ハイレベルメッセージングプロトコル

• TCPに対するHTTPみたいなプロトコル

• @ControllerでSpring MVC likeにWebSocketプログラミングができる

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

デモ

http://bit.ly/stomp-demo

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

デモ

接続

http://bit.ly/stomp-demo

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

デモ

http://bit.ly/stomp-demo

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

デモ

いいね!

http://bit.ly/stomp-demo

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

デモ

http://bit.ly/stomp-demo

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

CONNECTで接続

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

CONNECTで接続

SUBSCRIBEで特定の宛先メッセージを購読

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

CONNECTで接続

SUBSCRIBEで特定の宛先メッセージを購読

SENDでアプリケーションの宛先へメッセージを送信

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

CONNECTで接続

SUBSCRIBEで特定の宛先メッセージを購読

SENDでアプリケーションの宛先へメッセージを送信

購読したメッセージが届く

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

Controllerクラス

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

Controllerクラス

アプリケーションへの宛先

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

Controllerクラス

アプリケーションへの宛先

メッセージ送り先

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

Controllerクラス

アプリケーションへの宛先

メッセージ送り先

JSONにシリアライズされて購読している全クライアントに送

信される

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

JavaConfigクラス

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

JavaConfigクラス

アプリケーションへの 送信先のprefix

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

• 要stomp.js

クライアント

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

• 要stomp.js

クライアント

CONNECT

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

クライアント

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

クライアントSUBSCRIBE

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

クライアントSUBSCRIBE

受信したら実行される コールバック

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

クライアント

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

クライアント

メッセージ送信

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

変更のあるAPI• http://docs.spring.io/spring-framework/docs/

3.2.4.RELEASE_to_4.0.0.RELEASE/

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

変更のあるAPI• http://docs.spring.io/spring-framework/docs/

3.2.4.RELEASE_to_4.0.0.RELEASE/

遂にStruts, iBatisサポートが削除されました!

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

併せて読みたい

http://rstoyanchev.github.io/webinar-websocket-spring

http://spring.io/guides/gs/messaging-stomp-websocket/

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

Spring Boot

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

Spring Bootとは?

• 一言でいうと

• Springアプリケーションを迅速に開発するための仕組み

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

Spring Bootの背景

• DI x AOPで注目され、重厚なJ2EEのアンチテーゼとして2004年に登場

!

!

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

Springのサブプトジェクト群

Web

Core

DataAccess Batch Enterprise Integration

Security

IDE

RAD Starter

Social

Spring MVC

Spring WebFlow

Spring Mobile

Spring Roo

Spring Data JPA

Spring DataMongoDB

Spring Boot

Spring Tool Suite (STS)

Spring SocialTwitter

Spring SocialFacebook

Spring SocialGithub

Big Data

Spring Data Rest

Spring Batch Spring Integration

Spring DI Spring AOP

Spring Security

Spring SecurityOAuth

Spring XD

Spring TX

Spring Hadoop

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

Springのサブプトジェクト群

Web

Core

DataAccess Batch Enterprise Integration

Security

IDE

RAD Starter

Social

Spring MVC

Spring WebFlow

Spring Mobile

Spring Roo

Spring Data JPA

Spring DataMongoDB

Spring Boot

Spring Tool Suite (STS)

Spring SocialTwitter

Spring SocialFacebook

Spring SocialGithub

Big Data

Spring Data Rest

Spring Batch Spring Integration

Spring DI Spring AOP

Spring Security

Spring SecurityOAuth

Spring XD

Spring TX

Spring Hadoop

大杉!

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

サブプロジェクトが どんどん増えJava EEより肥大化・・

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

そこで生まれたSpring Boot

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

Spring Bootの特徴• サブプロジェクトの複雑な依存関係がまとめられ、

pom.xml or build.gradleがシンプルになる。

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

• Production Readyな非機能面のサポート

• ”The Twelve-Factor App”で述べられるようなモダンなアプリケーションを作成できる。

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

まずは試す• pom.xmlに以下を追加

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

まずは試す• dependencyはこれだけ!

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

まずは試す• プラグイン追加

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

まずは試す• 正式リリースまではRepositoryを指定

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

まずは試す

• pom.xml 全体

• https://gist.github.com/making/8487605

• Gradleでもちろんできる

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

まずは試す• エントリポイント作成

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

まずは試す• エントリポイント作成

自動設定を有効化

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

まずは試す• Controller作成

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

まずは試す• 実行

$ mvn packge $ java -jar target/demo-0.0.1-SNAPSHOT.jar

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

まずは試す• 実行

$ mvn packge $ java -jar target/demo-0.0.1-SNAPSHOT.jar

jar!

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

Springのバナー表示

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

Springのバナー表示

色付きのログ出力

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

Springのバナー表示

色付きのログ出力

組み込みTomcat起動

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

Springのバナー表示

色付きのログ出力

組み込みTomcat起動

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

必要なファイルはこれだけ!

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

必要なファイルはこれだけ!

XMLがない! (logback.xmlも

web.xmlも)

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

Logback

Jackson

Tomcat

SLF4J

Spring Boot

Spring 4

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

mainメソッド実行でももちろんOK

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

Spring Tool Suite 3.4を使うと楽

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

Spring Tool Suite 3.4を使うと楽

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

Spring Tool Suite 3.4を使うと楽

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

Spring Tool Suite 3.4を使うと楽

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

[参考] DropWizard• http://dropwizard.codahale.com/

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

http://www.thoughtworks.com/radar

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

http://www.thoughtworks.com/radar

注目のフレームワーク

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

Spring BootはDrop WizardのSpring版! (しかもSpring謹製)

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

Spring Bootの主なスタック

Tomcat/Jetty

Sprin

g M

VC

Jack

son Sp

ring

Dat

a JP

A

Thym

eLea

f

Sprin

g Se

curit

y

Hib

erna

te

Spring

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

[参考] DropWizardの主なスタック

JAX-

RS(J

erse

y)

Jack

son

Free

Mak

er/

Mus

tach

e

独自

Auth

entic

atio

n?

Hib

erna

teJD

BI

Jetty

Guice

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

様々な自動設定群• spring-boot-autoconfigureに自動設定が組み込まれている

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

様々な自動設定群• org.springframework.boo

t.autoconfigureパッケージをチェック

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

様々な自動設定群• @EnableAutoConfigurationで読み込まれる設定は

META-INF/spring.factoriesに列挙されている。追加可能

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

自動設定の仕組み• @Conditional

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

自動設定の仕組み• @Conditional

対象のクラスがクラスパス上に存在したら有効

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

自動設定の仕組み• @Conditional

対象のクラスがクラスパス上に存在したら有効

対象のクラスのBeanがDIコンテナ上に存在しなかったら有効

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

自動設定の仕組み• @Conditional

対象のクラスがクラスパス上に存在したら有効

対象のクラスのBeanがDIコンテナ上に存在しなかったら有効

<mvc:annotaion-driven />と同じ

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

自動設定の仕組み• @Conditional

対象のクラスがクラスパス上に存在したら有効

対象のクラスのBeanがDIコンテナ上に存在しなかったら有効

<mvc:annotaion-driven />と同じ

プロパティファイルで変更可能

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

例: Tomcatのデータソース自動生成の流れ

• META-INF/spring.factoriesにDataSourceAutoConfigurationが定義されている。

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

例: Tomcatのデータソース自動生成の流れ

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

例: Tomcatのデータソース自動生成の流れ

EmbeddedDatabaseTypeがクラスパス上に存在したら有効 =spring-jdbc.jarが含まれていたら有効

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

例: Tomcatのデータソース自動生成の流れ

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

例: Tomcatのデータソース自動生成の流れ

(1) o.a.t.j.p.DataSourceが存在して、

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

例: Tomcatのデータソース自動生成の流れ

(1) o.a.t.j.p.DataSourceが存在して、

(2) javax.sql.DataSourceのBeanがDIコンテナ上に存在しなかったら

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

例: Tomcatのデータソース自動生成の流れ

(1) o.a.t.j.p.DataSourceが存在して、

(2) javax.sql.DataSourceのBeanがDIコンテナ上に存在しなかったら

(3) TomcatDataSourceConfigurationをimportする

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

例: Tomcatのデータソース自動生成の流れ

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

例: Tomcatのデータソース自動生成の流れ

DataSourceが生成され、DIコンテナに登録される

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

例: Tomcatのデータソース自動生成の流れ

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

例: Tomcatのデータソース自動生成の流れ

urlやusername等の設定情報はpropertieファイルからインジェクション可能

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

例: Tomcatのデータソース自動生成の流れ

urlやusername等の設定情報はpropertieファイルからインジェクション可能

spring.datasource.url: xxx spring.datasource.username: xxx spring.datasource.password: xxx

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

例: Tomcatのデータソース自動生成の流れ

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

例: Tomcatのデータソース自動生成の流れ

自分で定義すれば自動設定は適用されない

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

ドキュメントが整備されるまではソースを読んで設定内容を把握しよう

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

Production Readyな非機能面サポート

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

• spring-boot-starter-securityでセキュリティ強化

• 開発・本番環境の設定を変更するための仕組み

• などなど・・

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

spring-boot-actuator• GET /metrics

• GET /health

• GET /trace

• GET /dump

• POST /shutdown

• GET /beans

• GET /env

• など・・・

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

GET /env•ユーザー名: demo、パスワード: demo

•http://spring-boot-demo.herokuapp.com/env

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

GET /dump•ユーザー名: demo、パスワード: demo

•http://spring-boot-demo.herokuapp.com/dump

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

GET /metrics•ユーザー名: demo、パスワード: demo

•http://spring-boot-demo.herokuapp.com/metrics

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

Securityサポート• Spring Securityによる認証・認可

• Audit

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

SSHサーバー化• spring-boot-actuatorで取得できた情報をSSHで公開

• デフォルトで2000番ポートにSSHDが起動する

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

$ ssh -p 2000 demo@localhost

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

The Twelve-Factor App• Herokuの人がまとめた、スケーラブルで継続的デプロイ可能なWebアプリ/SaaSを構築するための方法論

• http://12factor.net/

• http://twelve-factor-ja.herokuapp.com/ (日本語訳)

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

The Twelve-Factor App

• Spring BootやDropWizardではThe Twelve-Factor Appで述べられているノウハウがいくつか実践されている

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080aaa.war

bbb.war

ccc.war

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080

aaa.warbbb.war

ccc.war

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080

aaa.warbbb.war

ccc.war

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080

aaa.warbbb.warccc.war

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080

aaa.warbbb.warccc.war

/aaa

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080

aaa.warbbb.warccc.war

/aaa

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080

aaa.warbbb.warccc.war

/aaa/bbb

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080

aaa.warbbb.warccc.war

/aaa/bbb

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080

aaa.warbbb.warccc.war

/aaa/bbb/ccc

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

アプリケーションのデプロイ方法• 従来のデプロイ

AP Server: 8080

aaa.warbbb.warccc.war

/aaa/bbb/ccc

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

/aaa

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

/aaa

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

/aaa

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

/aaa/bbb

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

/aaa/bbb

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

/aaa/bbb

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

/aaa/bbb

/ccc

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

/aaa/bbb

/ccc

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

• Spring BootやDropWizardのデプロイ

ccc.jar

アプリケーションのデプロイ方法

8082bbb.jar

8081aaa.jar

8080

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

Reverse Proxy

/aaa/bbb

/ccc

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

Ctrl+CでGraceful Shutdown

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

Ctrl+CでGraceful ShutdownCtrl+Cの後に

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

Ctrl+CでGraceful ShutdownCtrl+Cの後に

後処理

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

PaaS Friendly!• Heroku

• Procfile

!

!

• Deploy

web: java $JAVA_OPTS -jar target/demo-1.0-SNAPSHOT.jar --server.port=$PORT

$ echo "java.runtime.version=1.8" > system.properties $ heroku create $ git push heroku master

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

“war” is over!

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

もちろんwar”も”作成できる

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

その他• ViewはThymeleafをサポート

• Property

• CLI

• Testサポート

• DBマイグレーション

• などなど!

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

Thymeleafサポート

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

Thymeleafサポート

Spring4対応中

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

Thymeleafサポート

Spring4対応中

JSPも使えるがあまり推奨しない

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

ThymeleafAutoconfiguration

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

classpath直下のtempaltes

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

Property• @ConfigurationProperties

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

• Bean Validationもサポート

• YAMLもサポート(snake-yaml.jarがあれば)

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

Property

todo.maxCount

• @ConfigurationProperties

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

• Bean Validationもサポート

• YAMLもサポート(snake-yaml.jarがあれば)

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

Property• classpath直下のapplication.properties

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

Property• classpath直下のapplication.properties

100

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

Property• ローカルファイルのapplication.properties

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

Property• ローカルファイルのapplication.properties

200

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

Property• コマンドライン引数

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

Property• コマンドライン引数

400

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

開発方法

• mainメソッド実行?

• IDEのAPサーバー連携機能?

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

APサーバーで実行してもOK

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

WTPもOK

https://spring.io/guides/gs/convert-jar-to-war/

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

WTPもOK

Tomcat 7.0.47+

https://spring.io/guides/gs/convert-jar-to-war/

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

mainメソッドを実行していたら・・・

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

再起動したくない!

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

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

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

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に依存しない

Page 188: Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Page 189: Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Page 190: Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
Page 191: Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug

修正

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

修正

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

修正

再起動いらず

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

【後日追記】Spring Boot Plugin

• http://projects.spring.io/spring-boot/docs/spring-boot-tools/spring-boot-maven-plugin/README.html

• mvn spring-boot:runでもアプリは起動し、src/main/resources以下はhot refreshされます。ちょっとしたThymeleafやjavascriptのrefreshに便利

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

Spring is fun!

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

あわせて読みたい

• http://www.slideshare.net/sbrannen/spring-framework-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

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

まとめ

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

• Java EEとともにJavaフレームワークの選択肢の1つとして考えてほしい

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

Spring Bootでモダンなアプリを作りましょう!

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

ご清聴ありがとうございました!