Java
Git
gradle
spring-boot
新人プログラマ応援

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

More than 3 years have passed since last update.

こんにちはこんばんは!

株式会社情創 技術開発局

夏が近づいてきて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等で閲覧するのがおすすめです。

最後まで読んでいただきありがとうございました。

名残惜しいですが今回はこの辺で終わりにします。

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