薄給SEの技術屋日記

何でもポジティブに | 3人家族+チワワと暮らすSE | 20代は休む間も無く仕事と飲み会 | 30代から株主優待に目覚め今では節約しながら配当金投資 | 目標は配当金投資で住宅費月7万を補うこと | 大宮アルディージャサポ | 度重なる過労で体調不良となり家族と自分の身体を優先する生活 | 最近米国株の購入を開始

【Java】SpringBootのアプリケーションをWindowsサーバーでサービス化する

LOLIPOP

はじめに

SpringBootのアプリケーションをWindowsサーバーでサービス化します。
LinuxサーバーのサービスとしてSpringbootのJARファイルを指定することは可能ですが、
Windowsの場合、nssmというツールを利用しない限り、サービス化することができません。

サービス化するこのメリット


サービス化することでWindowsサーバーが起動した際に自動でアプリケーションが起動します。
アプリケーションを停止する場合はシャットダウンもしくはサービスの停止で停止が可能です。
起動用のバッチファイルを直接実行してもよいですが、バックグラウンドで起動しているプロセスを
停止する術がコマンドもしくはタスクマネージャしかないのは正直運用に耐えられません。
それではさっそくWindowsサーバーでのサービス化を試してみましょう。




nssmダウンロード

フリーソフトの「NSSM」(http://nssm.cc/download) をダウンロードします。
ダウンロードしたNSSMを所定のフォルダに格納します。
今回は64bit端末のため、「nssm-2.24\win64\nssm.exe」を使用します。

JARファイル準備

Eclipseから対象プロジェクトを右クリックし、Maven→インストールを実行します。
対象プロジェクトのtargetフォルダ配下にJARファイルが作成されているかと思います。

JAR実行用バッチ作成


以下を参考にバッチファイルを作成します。
jarファイル名を置換しておきます。 


@echo on

setlocal

set JAVA_HOME=C:\java
set PATH=%JAVA_HOME%\bin;%PATH%
set WEBAPP_HOME=C:\apl
set WEBAPP_JAR=test.jar
set LANG=ja_JP.UTF8
set JAVA_OPTS=-Xms2048M -Xmx2048M
set RUN_ARGS=--spring.profiles.active=hon

cd /d %WEBAPP_HOME%
java -server -jar lib\%WEBAPP_JAR%

サーバーにフォルダを作成する


以下フォルダを作成します。
C:\apl\bat ※バッチファイルを格納します。
C:\apl\java ※実行用Javaを格納します。ここではeclipse同梱のJavaを使用。
C:\apl\lib ※jarファイルを格納します。
C:\apl\logs ※アプリケーションで出力するログフォルダです。logback.xml等で指定が必要。
C:\apl\nssm ※nssmのexeファイルを格納します。

NSSMを実行する


NSSMを実行し、Springbootアプリケーションをサービス化します。
コマンドプロンプトを起動し、以下コマンドを実行します。


cd /d C:\apl\nssm
nssm install apl
Administrator access is needed to install a service. 


以下の画面を起動されるので、起動バッチのパスとディレクトリ、サービス名を指定する。



Successの文字が出力されれば成功です。

* サービス起動

サービスを開くと登録したサービス名が一覧に表示されていますので、試しに起動します。
無事に起動できれば終了です。
失敗した時はバッチファイルのパスの指定やlibフォルダへのJavaファイルの格納ミス等が考えられます。