Spring-Bootアプリケーションに代替エントリポイントを追加したい。私はこれを太い瓶のままにしておきたいです。これは可能ですか?
彼らの documentation によると、プロパティloader.main
は、起動するメインクラスの名前を指定します。
私は試した Java -jar MyJar.jar --loader.main=com.mycompany.AlternateMain
しかし、pom.xmlで指定されたstart-classはまだ実行されていました(これをpom.xmlから削除すると、パッケージング中にエラーが発生します)。
または、Java -cp MyJar.jar com.mycompany.AlternateMain
しかし、ネストされたすべてのjarをクラスパスに追加するための適切な方法がわかりません。
助言がありますか?
編集:これが私が使用した解決策です
Jstが提案したように、Launcherを変更してPropertiesLauncherを使用しました。これを行うには、spring-boot-maven-pluginの構成を変更します。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>${start-class}</mainClass>
<layout>Zip</layout>
...
<layout>Zip</layout>
PropertiesLauncher
を使用するようにSpring Bootをトリガーします。
私は自分のファットjar(mvnパッケージ)を作成し、次のように代替メインを呼び出しました。
Java -jar -Dloader.main=com.mycompany.AlternateMain MyJar.jar
助けてくれてありがとう!
私はあなたの場合に財産が適用されるとは思わない。 3つの異なる「ランチャー」があります(ドキュメントに戻って参照してください)。 jarを構築する場合は、JarLauncherクラスを使用します。 PropertiesLauncherに切り替えると、loader.mainが役立ちます。
META-INF/MANIFEST.MF
Main-Class: org.springframework.boot.loader.PropertiesLauncher
別のアプローチをとり、コマンドラインパラメーターを使用して、SpringApplicationクラスとして使用するクラスを決定しました。 main()メソッドは1つしかありませんが、コマンドラインパラメータに基づいて使用される、異なる構成の異なるアプリケーションクラスがあります。
Main()を含む単一のクラスがあります:
public static void main(String[] args) {
SpringApplication app;
if( ArrayUtils.contains(args, "--createdb")){
app = new SpringApplication(CreateDB.class);
args = (String[])ArrayUtils.add(args, "--spring.jpa.hibernate.ddl-auto=create");
} else {
app = new SpringApplication(Application.class);
}
app.setWebEnvironment(false);
app.setShowBanner(false);
app.addListeners(new ConfigurationLogger());
// launch the app
ConfigurableApplicationContext context = app.run(args);
// finished so close the context
context.close();
}
しかし、2つの異なるSpringApplicationクラスがあります。Application.classとCreateDB.classです。各クラスは、異なる@ComponentScan
パスと、異なる@EnableAutoConfiguration
オプションおよび異なる@Configuration
オプションを定義します。最後に、コマンドライン引数に基づいて、追加のプロファイルなどをプログラムで有効にするかどうかを決定できます。
私の場合、別のランチャーでDBスキーマを作成して終了するだけなので、コマンドラインパラメーターを強制しました。
単一のmain
を使用することをお勧めしますが、Springプロファイル(または構成プロパティ)を使用して、1つまたは他の「エントリポイント」を選択します@Configuration
クラス。