サービスとしてのSpring Bootアプリケーション
1概要
この記事では、Spring Bootアプリケーションをサービスとして実行するためのいくつかのオプションについて説明します。
まず、Webアプリケーションのパッケージ化オプションとシステムサービスについて説明します。以降のセクションでは、LinuxとWindowsベースのシステムの両方にサービスを設定するときに使用できるさまざまな方法について説明します。
最後に、私たちは追加の情報源への言及で締めくくります。
** 2プロジェクトの設定と作成方法
2.1. 包装
Webアプリケーションは伝統的にWebアプリケーションアーカイブ(WAR)としてパッケージ化され、Webサーバーにデプロイされます。
Spring BootアプリケーションはWARファイルとJARファイルの両方としてパッケージ化されているかもしれません。後者はJARファイル内にWebサーバーを埋め込むので、アプリケーションサーバーのインストールや設定を必要とせずにアプリケーションを実行できます。
2.2. Mavenの設定
まず、
pom.xml
ファイルの設定を定義します。
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
....
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
パッケージは
jar
に設定する必要があります。この記事の執筆時点ではSpring Bootの最新の安定バージョンを使用していますが、1.3以降のバージョンで十分です。利用可能なバージョンについてのより多くの情報を見つけることができますhttp://projects.spring.io/spring-boot/[here]。
spring-boot-maven-plugin
アーティファクトの
<executable>
パラメーターを
true
に設定したことに注意してください。これにより、
MANIFEST.MF
ファイルが確実にJARパッケージに追加されます。このマニフェストには、どのクラスがアプリケーションのメインメソッドを定義するかを指定する
Main-Class
エントリが含まれています。
2.3. アプリケーションを構築する
アプリケーションのルートディレクトリ内で次のコマンドを実行します。
$ mvn clean package
実行可能なJARファイルは
target
ディレクトリにあり、コマンドラインで次のコマンドを実行してアプリケーションを起動できます。
$ java -jar your-app.jar
この時点でも、
-jar
オプションを指定してJavaインタプリタを呼び出す必要があります。アプリケーションをサービスとして呼び出すことができるようにして起動することをお勧めする理由はたくさんあります。
3 Linux
の場合
バックグラウンドプロセスとしてプログラムを実行するためには、単に
nohup
Unixコマンドを使用することができますが、これはさまざまな理由からも好ましい方法ではありません。このhttp://stackoverflow.com/questions/958249/whats-the-difference-between-nohup-and-a-daemon[thread]に、良い説明があります。
代わりに、プロセスを「デーモン化」します。 Linuxでは、従来の
System V init
スクリプトまたは
Systemd
設定ファイルのいずれかでデーモンを設定することを選択できます。前者は伝統的に最も有名な選択肢ですが、次第に後者に置き換えられつつあります。
この違いについての詳細はhttp://www.tecmint.com/systemd-replaces-init-in-linux/[ここ]をご覧ください。
セキュリティを強化するために、まずサービスを実行する特定のユーザーを作成し、それに応じて実行可能なJARファイルのアクセス許可を変更します。
$ sudo useradd baeldung
$ sudo passwd baeldung
$ sudo chown baeldung:baeldung your-app.jar
$ sudo chmod 500 your-app.jar
** 3.1. System Vの初期化
**
Spring Bootの実行可能JARファイルにより、サービスの設定プロセスは非常に簡単になります。
$ sudo ln -s/path/to/your-app.jar/etc/init.d/your-app
上記のコマンドは、実行可能なJARファイルへのシンボリックリンクを作成します。
実行可能なJARファイルへのフルパスを使用する必要があります。そうしないと、シンボリックリンクが正しく機能しません。このリンクを使用すると、アプリケーションをサービスとして起動できます。
$ sudo service your-app start
このスクリプトは、標準サービスの
start
、
stop
、
restart
、および
status
コマンドをサポートしています。さらに:
-
それは我々が持っているユーザ
baeldung
の下で走っているサービスを開始します
作成した
** アプリケーションのプロセスIDを追跡します。
/var/run/あなたのアプリ/あなたのapp.pid
** コンソールログを
/var/log/your-app.log
に書き込みます。
アプリケーションが正常に起動しない場合に確認する
3.2. 体系化された
systemdサービスの設定もとても簡単です。まず、次の例を使用して
your-app.service
という名前のスクリプトを作成し、
/etc/systemd/system
ディレクトリに配置します。
----[Unit]Description=A Spring Boot application
After=syslog.target
[Service]User=baeldung
ExecStart=/path/to/your-app.jar SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
----
アプリケーションに合わせて
Description
、
User
、および
ExecStart
フィールドを変更することを忘れないでください。この時点でも、前述の標準サービスコマンドを実行できるはずです。
前のセクションで説明した
System V init
アプローチとは対照的に、プロセスIDファイルとコンソールログファイルはサービススクリプトの適切なフィールドを使用して明示的に設定する必要があります。オプションの包括的なリストはhttp://www.freedesktop.org/software/systemd/man/systemd.service.html[ここ]にあります。
** 3.3. 新興企業
**
Upstart
はイベントベースのサービスマネージャで、
System V init
の代わりとなる可能性があり、さまざまなデーモンの動作をより詳細に制御できます。
このサイトにはhttp://upstart.ubuntu.com/getting-started.html[setup instructions]があり、ほとんどのLinuxディストリビューションで動作するはずです。 Ubuntuを使うときは、おそらくすでにインストールされ設定されているでしょう(
/etc/init
に “upstart”で始まる名前のジョブがあるか確認してください)。
Spring Bootアプリケーションを起動するために
your-app.conf
というジョブを作成します。
# Place in/home/{user}/.config/upstart
description "Some Spring Boot application"
respawn # attempt service restart if stops abruptly
exec java -jar/path/to/your-app.jar
それでは「start your-app」を実行すると、サービスが開始されます。
Upstartは多くのジョブ設定オプションを提供しています、あなたはそれらのほとんどを見つけることができますhttp://upstart.ubuntu.com/cookbook/[here]。
4 Windowsの場合
このセクションでは、Java JARをWindowsサービスとして実行するために使用できるオプションをいくつか紹介します。
4.1. Windowsサービスラッパー
Java Service Wrapper
(次のサブセクションを参照)のGPLライセンスと次の項目の組み合わせによる問題のため。 JenkinsのMITライセンス、https://github.com/kohsuke/winsw[Windows Service Wrapper]プロジェクト(
winsw
とも呼ばれる)が考案されました。
Winsw
は、サービスをインストール/アンインストール/開始/停止するためのプログラム的な手段を提供します。さらに、Windowsでサービスとしてあらゆる種類の実行可能ファイルを実行するために使用されることがありますが、Java Service Wrapperは、その名前が示すように、Javaアプリケーションのみをサポートします。
まず、バイナリhttp://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/[ここ]をダウンロードします。次に、Windowsサービスを定義する設定ファイル
MyApp.xml
は、次のようになります。
<service>
<id>MyApp</id>
<name>MyApp</name>
<description>This runs Spring Boot as a Service.</description>
<env name="MYAPP__HOME" value="%BASE%"/>
<executable>java</executable>
<arguments>-Xmx256m -jar "%BASE%\MyApp.jar"</arguments>
<logmode>rotate</logmode>
</service>
最後に、
winsw.exe
の名前を
MyApp.exe
に変更して、その名前が
MyApp.xml
設定ファイルと一致するようにする必要があります。その後、あなたはそのようにサービスをインストールすることができます:
$ MyApp.exe install
同様に、
uninstall
、
start
、
stop
などを使用できます。
4.2. Javaサービスラッパー
Java Service Wrapper
プロジェクトのGPLライセンスを取得しても構わない場合は、この方法でJARファイルをWindowsとして設定する必要があるかもしれません。同様にサービスします。基本的に、Java Service WrapperはあなたがプロセスファイルをWindowsの下でサービスとして実行する方法を指定する設定ファイルで指定することも要求します。
この記事
では、このようなJARファイルの実行をWindowsのサービスとして設定する方法を非常に詳細に説明しています。そのため、この情報を繰り返す必要はありません。
5その他の参考資料
Spring Bootアプリケーションは、http://commons.apache.org/daemon/index.htmlのhttp://commons.apache.org/proper/commons-daemon/procrun.html[Procrun]を使用してWindowsサービスとして起動することもできます。[Apache Commons Daemon]プロジェクト。 Procrunは、WindowsユーザーがJavaアプリケーションをWindowsサービスとしてラップできるようにする一連のアプリケーションです。このようなサービスは、マシンの起動時に自動的に開始され、ユーザーがログオンしていなくても実行を継続するように設定されている場合があります。
UnixでのSpring Bootアプリケーションの起動に関する詳細は、http://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html[こちら]にあります。
Red Hatベースのシステムのhttps://access.redhat.com/documentation/en-US/Red
Hat
Enterprise
Linux/7/html/System
Administrators
Guide/sect-Managing
Services
with
systemd-Unit__Files.html[Systemdユニットファイル]を変更する方法についての詳細な説明もあります。最後に
最後に、https://coderwall.com/p/ssuaxa/how-to-make-a-jar-file-linux-executable[このクイックハウツー]はBashスクリプトをJARファイルに組み込む方法を説明しています。実行可能ファイル自体
6. 結論
サービスを使用すると、アプリケーションの状態を非常に効率的に管理できます。また、これまで見てきたように、Spring Bootアプリケーションのサービス設定もこれまでになく簡単になりました。
サービスを実行するには、ユーザー権限に関する重要で簡単なセキュリティ対策に従うことを忘れないでください。