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アプリケーションのサービス設定もこれまでになく簡単になりました。

サービスを実行するには、ユーザー権限に関する重要で簡単なセキュリティ対策に従うことを忘れないでください。