3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1つのSpring Project内に複数のMainクラスを入れる

Posted at

概要

プロジェクトに複数のバッチ処理がある場合、1つのプロジェクトに複数のバッチを入れる、複数のプロジェクトに分けるなどの選択肢があります。
この記事では、前者の1つのプロジェクトに複数のバッチを入れるのアプローチで、Mainクラスを分ける方法を試しました。

前提

>gradle -v

------------------------------------------------------------
Gradle 6.5
------------------------------------------------------------

Build time:   2020-06-02 20:46:21 UTC
Revision:     a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4

Kotlin:       1.3.72
Groovy:       2.5.11
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          11.0.2 (Oracle Corporation 11.0.2+9)
OS:           Windows 10 10.0 amd64

STS 3.9.9.RELEASE(いい加減4系にしないと・・・)

プロジェクト構成

multiple-main
└src/main/java
 └com/example/dem
  ├MultipleApplication.java
  └MultipleApplication2.java

Mainクラスの呼び分け方法

STSの場合

Spring Applicationを実行しようとすると、下図のようにMainクラスを選ぶ画面が出てくるので、実行したい方を選ぶ。
スクリーンショット 2020-11-03 094542.png

Gradleの場合

applicationプラグインを読み込ませたうえで、mainClassを指定する。
いちいちbuild.gradleを書き換えないといけないので不便ですね。
(参考リンク1)

plugins {
	id 'org.springframework.boot' version '2.3.5.RELEASE'
	id 'io.spring.dependency-management' version '1.0.10.RELEASE'
	id 'java'
	id 'application'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
mainClassName = "com.example.demo.MultipleMainApplication2"

repositories {
	mavenCentral()
}

jar実行の場合

java -cp multiple-main-0.0.1-SNAPSHOT.jar -Dloader.main=com.example.demo.MultipleMainApplication org.springframework.boot.loader.PropertiesLauncher

(参考リンク2)

PropertiesLauncher is 何者?という感じですが、build.gradleのmainClassがMultipleMainApplication2の状態でも、MultipleMainApplication(無印)の方を起動することが出来ました。

まとめ

一応出来なくもないけど、筋悪な気がしました。
Mainクラスだと、Spring管理下のBeanを扱いづらい(扱えないわけではない)ので、1つのプロジェクトに複数の処理を入れるのであれば、下記の記事を参考にRunnerを切り替える方法が良いと思います(現場でもこの方法を採用した)。

Spring Bootの実行可能jarに複数のCommandLineRunner/ApplicationRunner実装クラスを入れて、起動時のプロパティで実行するクラスを切り替える - Qiita

参考リンク

  1. 第45章 アプリケーション プラグイン
  2. Spring Boot:メインクラスの設定
  3. Spring Bootの実行可能jarに複数のCommandLineRunner/ApplicationRunner実装クラスを入れて、起動時のプロパティで実行するクラスを切り替える - Qiita
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?