同じホストで spring-boot アプリケーションの 2 つのインスタンスを実行するために、次の手順を実行しました。
- spring-boot maven プラグインのリパッケージ ゴールで jar をビルドする
- リモートサーバーの application-0.jar に application.jar をコピーします
- APP_NAME=application-0 で application-0.conf ファイルを作成しました
- application-0.jar をサービスとして起動
- リモート サーバーの application-1.jar に application.jar をコピーします。
- APP_NAME=application-1 で application-1.conf ファイルを作成しました
- application-1.jar をサービスとして起動
次に、application-1 の起動時に次のエラーが発生しました:サービス アプリケーションは既に提供されています!
だから私はそれを実現しました:
- Linux サービス名は jar にハードコードされているため、jar を何度コピーして名前を変更しても、サービスは同じままです (この場合はアプリケーション サービス)。
- APP_NAME はサービス名には影響しません。.conf ファイルの APP_NAME は、それぞれ application-0 と application-1 に設定されています。私はまだ問題を抱えています。
spring-boot プラグインのドキュメントを読み、同じビルドのさまざまな spring-boot maven プラグインの実行で、attach、classifier、およびembeddedLaunchScriptProperties.initInfoProvidesオプションの失敗したコンパイルを試みました。
また、別の Maven プロファイルで別の実行をカプセル化しようとしました。元の jar ファイルが 1 つと、Spring-Boot jar が 1 つ残っています。
したがって、誰かが私の目標を達成する方法を知っていれば (同じソース、同じホストで実行しているため、適切に構成された複数の Linux サービス)、本当に助けていただければ幸いです。
失敗した構成の例を以下に示します。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>classic</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<executable>true</executable>
</configuration>
</execution>
<execution>
<id>instance-0</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-0</finalName>
<executable>true</executable>
<classifier>exec</classifier>
<attach>false</attach>
</configuration>
</execution>
<execution>
<id>instance-1</id>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<finalName>${project.artifactId}-1</finalName>
<executable>true</executable>
<classifier>exec</classifier>
<attach>false</attach>
</configuration>
</execution>
</executions>
</plugin>
ありがとうございました