5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Spring Boot解説第11回(開発環境編:ホットデプロイとActuator)

Last updated at Posted at 2016-05-28

こんにちはこんばんは!
株式会社情創 技術開発局
夏が近づいてきてBBQをやって
焼肉が食べたい@YAKINIKUです!
今回はホットデプロイとActuatorについて解説していきます!

#ホットデプロイ
##ホットデプロイとは
アプリケーションサーバー(Tomcat)を停止することなく、
ソースコードの変更を即座に反映する方法のことを言います。

##導入
build.gradleの中にあるbuildscriptのdependenciesに
classpath("org.springframework:springloaded:1.2.1.RELEASE")
を追加します。

build.gradle
buildscript {
	ext {
		springBootVersion = '1.3.1.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")	
        classpath("org.springframework:springloaded:1.2.1.RELEASE")
    }
}

追加後、プロジェクトを右クリックしてメニューを開き
Gradleからすべてリフレッシュを実行します。

##実行
リフレッシュが完了したら実行します。
Gradleタスクを開いて
プロジェクトを選択
bootRunをダブルクリックして起動します。
hello.png

以上で、ホットデプロイの実装は完了です。
これでjavaファイルを編集した後にTomcatを
再起動しなくてもビルド後に編集結果が反映されるようになります!

動作確認をします。
第2回で作成したHello World!を表示させるプログラムを、
Hello new World!に変更したところ即座に反映されました。
aaa.png
↓↓↓
world.png

#Actuator
##Spring Boot Actuatorとは
アプリケーションにエンドポイントを追加して、システムの状態や
メトリクス(ソフトウェアの品質を評価した数値)を
web上から確認することができるようになるサブモジュールで
システムやソフトウェアの監視や検査(ヘルスチェック)を楽にしてくれます。

##導入
導入方法自体はとても簡単でbuild.gradleのdependenciesの下に
下記のように
compile("org.springframework.boot:spring-boot-starter-actuator:${springBootVersion}")
を追加するだけです。

build.gradle
dependencies {
	compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
    compile("org.springframework.boot:spring-boot-starter-jdbc:${springBootVersion}") 
    compile("org.springframework.boot:spring-boot-starter-actuator:${springBootVersion}")
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
}

次は主なエンドポイントについて解説していきます。
##主なエンドポイント
###autoconfig
Springのソースファイル内で@Configurationの設定が自動設定された時、されなかった時のエラー等のチェックができます。
###beans
アプリ内で動作しているすべてのBeanの確認をします。
###configprops
Springのソースファイル内で@ConfigrationPropertiesで指定されているプロパティの一覧を表示します。
###dump
サーバー内で動作しているスレッドの一覧をダンプします。
###env
Springに登録されているプロパティ一覧を見ることができます。
環境変数等を見ることができて便利です。
###health
サーバーのステータスの情報を表示します。
healthにはカスタマイズが必要で、
詳細につきましてはこちらを参照してください。
###mappings
Springのソースファイル内で@RequestMapping に登録されているマッピング情報の一覧を表示します。
###metrics
アプリケーションのメトリクス(ソフトウェアの品質を評価した数値)を取得します。
###trance
アクセスログを表示します。
デフォルトでは直近10件を取得します。

ここで説明している以外のエンドポイントは英語のページですが、こちらを参照ください。
##パスやポート番号、アドレスの指定
第7回で作成した
application.propertiesでパスやポート番号、アドレスの指定ができます。
開発環境用のapplication-dev.propertiesに記載します。
headerがオンのままだと外部から情報を取得される危険があるため、
そういったことが無いように
management.add-application-context-header=false
と記載してオフにしておきます。

application-dev.properties
#actuator
#headerをオフ
management.add-application-context-header=false
# パスの指定
management.contextPath=/manager
# ポート番号の指定
management.port=8081
# アドレスの指定
management.address=127.0.0.1

本番時に使用しないため本番環境用の
application-prd.propertiesに下のコードを記載しておきます。

application-prd.properties
#actuatorOFF
endpoints.enabled=false

##実行
mappingsを例にして動作確認します。

パスに指定した/managerを追加したURLをブラウザに打ち込みます。
http://localhost:8081/manager/mappings/

下記のファイルが出力されます。
※IEはファイルをダウンロード、firefox、googlechromeはそのままブラウザ上に表示されます。

mappings.json
{"/webjars/**":{"bean":"resourceHandlerMapping"},"/**":{"bean":"resourceHandlerMapping"},"/**/favicon.ico":{"bean":"faviconHandlerMapping"},"{[/]}":{"bean":"requestMappingHandlerMapping","method":"public java.lang.String com.qiita.demo.web.controller.HelloWorldController.home()"},"{[/demo]}":{"bean":"requestMappingHandlerMapping","method":"public java.lang.String com.qiita.demo.web.controller.LogbackDemoController.home()"},"{[/error]}":{"bean":"requestMappingHandlerMapping","method":"public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)"},"{[/error],produces=[text/html]}":{"bean":"requestMappingHandlerMapping","method":"public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)"}}

json形式で整形されずに出力されるため、
json viewer等で閲覧するのがおすすめです。

最後まで読んでいただきありがとうございました。
名残惜しいですが今回はこの辺で終わりにします。

それではみなさんまた会いましょう!

5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?