하나의 Spring Project 내에 여러 개의 Main 클래스를 넣습니다.

3878 단어 자바spring-boot

개요



프로젝트에 여러 일괄 처리가 있는 경우 하나의 프로젝트에 여러 일괄 처리를 넣거나 여러 프로젝트로 나누는 등의 옵션이 있습니다.
이 기사에서는 전자의 한 프로젝트에 여러 배치를 넣는 방법으로 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 클래스를 선택하는 화면이 나오므로 실행하고 싶은 분을 선택한다.


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

참고 링크


  • 제45장 애플리케이션 플러그인
  • Spring Boot : 메인 클래스 설정
  • Spring Boot의 실행 가능 jar에 복수의 CommandLineRunner/ApplicationRunner 구현 클래스를 넣어, 기동시의 프로퍼티로 실행하는 클래스를 전환한다 - Qiita
  • 좋은 웹페이지 즐겨찾기