Spring Boot実行可能jarパッケージプロダクションシステムサービス
Spring BootのMavenプラグインでは、完全な実行可能プログラムを構築する機能も提供されていますが、どういう意味ですか?
つまり、java -jar
jarを直接実行して、プログラムを使用せずにプログラムを実行できます。これにより、バックグラウンドで実行されるシステムサービスとして簡単に作成できます。
主な手順は次のとおりです。
1. pomファイルを構成する
Spring Bootプラグインをpom.xmlに追加し、実行可能な構成を設定するように注意してください
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
2.実行可能なjarを生成する
上記の設定が完了したら、を使用mvn install
して、実行可能なjarパッケージをパッケージ化してビルドします
3.ソフト接続を作成します
/etc/init.d/
ディレクトリへのソフトリンクを作成する
sudo ln -s /var/yourapp/yourapp.jar /etc/init.d/yourapp
4.サービスベースのスタートアッププロジェクト
ソフト接続が作成されたら、次のコマンドでyourapp.jarアプリケーションの開始、停止、再起動操作を制御できます
service yourapp start
service yourapp stop
service yourapp restart
service yourapp start
解説
zip形式のマジックナンバー
生成されたjar / warは実際にはzipファイルですが、このzipファイルをシェルの下で直接実行できるのはなぜですか?
次のzipファイルの形式を調べます。
zipファイルはエントリで構成されており、各エントリの先頭は4バイトmagic number
です。
Local file header signature = 0x04034b50 (read as a little-endian number)
即 PK\003\004
リファレンス:https : //en.wikipedia.org/wiki/Zip_(file_format)
zip処理ソフトウェアは、処理を開始する前にマジックナンバーを読み取ります。したがって、linux / unixでは、zipファイルの先頭に直接bashファイルを書き込むことができるため、bashスクリプトと見なされます。このファイルを読み取っても、zip処理ソフトウェアは引き続き正しく処理できます。
たとえば、spring bootによって生成されたexecutable jar/war
場合、最初は次のとおりです。
#!/bin/bash
#
# . ____ _ __ _ _
# /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
# ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
# \\/ ___)| |_)| | | | | || (_| | ) ) ) )
# ' |____| .__|_| |_|_| |_\__, | / / / /
# =========|_|==============|___/=/_/_/_/
# :: Spring Boot Startup Script ::
#
スクリプトコンテンツの最後に、zipエントリのマジックナンバーが表示されます。
exit 0
PK^C^D
春のブーツのlaunch.script
実際spring boot maven plugin
、次のスクリプトはファットジャーの前部にパッケージ化されています。
これlaunch.script
は多くの変数設定をサポートします。
また、自動またはサービスの異なるモードにあるかどうかを自動的に識別できます。
いわゆるauto mode
直接操作を指しますjar/war
。
./demo.jar
そしてservice mode
それはオペレーティングシステムがサービスを開始する場合です:
service demo start/stop/restart/status
したがって、ファットjarは通常のコマンドラインで直接実行する./xxx.jar
か、/etc/init.d/
次のリンクにリンクしてサービスにすることができます。
まとめ
jar/war
実際にはzip形式です。spring-boot-maven-plugin
起動スクリプトをexecutable jar/war
前面に表示します。exit 0
スクリプトの最後の行は、スクリプトがjar / warのコンテンツではなく、独自のコンテンツのみを実行することです。- zipファイルは複数のエントリで構成され、最初
magic number
にエントリがあるため、zip処理ソフトウェアは前のスクリプトをスキップして正確に見つけることができますzip entry