Spring Boot実行可能jarパッケージプロダクションシステムサービス

Spring Boot実行可能jarパッケージプロダクションシステムサービス

Spring BootのMavenプラグインでは、完全な実行可能プログラムを構築する機能も提供されていますが、どういう意味ですか?

つまり、java -jarjarを直接実行して、プログラムを使用せずにプログラムを実行できます。これにより、バックグラウンドで実行されるシステムサービスとして簡単に作成できます。

主な手順は次のとおりです。

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、次のスクリプトはファットジャーの前部にパッケージ化されています。

https://github.com/spring-projects/spring-boot/blob/v1.5.18.RELEASE/spring-boot-tools/spring-boot-loader-tools/src/main/resources/org/springframework/boot/ loader / tools / launch.script

これlaunch.scriptは多くの変数設定をサポートします。

また、自動またはサービスの異なるモードにあるかどうかを自動的に識別できます。

いわゆるauto mode直接操作を指しますjar/war

./demo.jar

そしてservice modeそれはオペレーティングシステムがサービスを開始する場合です:

service demo start/stop/restart/status

したがって、ファットjarは通常のコマンドラインで直接実行する./xxx.jarか、/etc/init.d/次のリンクにリンクしてサービスにすることができます。

まとめ

  1. jar/war実際にはzip形式です。
  2. spring-boot-maven-plugin起動スクリプトをexecutable jar/war前面に表示します。
  3. exit 0スクリプトの最後の行は、スクリプトjar / warのコンテンツではなく、独自のコンテンツのみを実行することです。
  4. zipファイルは複数のエントリで構成され、最初magic numberエントリがあるため、zip処理ソフトウェアは前のスクリプトをスキップして正確に見つけることができますzip entry
420件の元の記事を公開しました 143件のいいね 890,000回の閲覧

おすすめ

転載: blog.csdn.net/jeikerxiao/article/details/98873827