programing

스프링 부트 - 대체 시작 클래스를 지정하는 방법(다중 진입점)

instargram 2023. 7. 11. 21:27
반응형

스프링 부트 - 대체 시작 클래스를 지정하는 방법(다중 진입점)

Spring-Boot 응용 프로그램에 대체 진입점을 추가하려고 합니다.저는 이것을 기름진 병으로 보관하는 것을 선호합니다.이것이 가능합니까?

그들의 문서에 따르면, 그 재산은loader.main시작할 기본 클래스의 이름을 지정합니다.

나는 노력했다.java -jar MyJar.jar --loader.main=com.mycompany.AlternateMain그러나 내 pom.xml에 지정된 start-class는 여전히 실행 중입니다(그리고 pom.xml에서 이것을 제거하면 패키징 중 오류가 발생합니다).

대신에, 나는 시도했습니다.java -cp MyJar.jar com.mycompany.AlternateMain하지만 나는 모든 중첩된 병을 클래스 경로에 추가하는 좋은 방법을 모릅니다.

좋은 의견이라도 있나?

편집: 사용한 솔루션은 다음과 같습니다.

방금 제안한 대로 속성을 사용하도록 런처를 변경했습니다.런처.스프링 부트 메이븐 플러그인의 구성을 수정하여 이 작업을 수행했습니다.

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <mainClass>${start-class}</mainClass>
    <layout>ZIP</layout>
    ...

<layout>ZIP</layout> 를 사용하도록 스프링 부트를 트리거합니다.

저는 지방 항아리(mvn 패키지)를 만들고 대체 메인을 다음과 같이 불렀습니다.

java -jar -Dloader.main=com.mycompany.AlternateMain MyJar.jar

도와주셔서 감사합니다!

SpringApplication 클래스로 사용할 클래스를 결정하기 위해 다른 접근 방식을 사용하고 명령줄 매개 변수를 사용했습니다.주() 메서드는 하나뿐이지만 명령줄 매개 변수를 기반으로 사용되는 구성이 서로 다른 응용 프로그램 클래스가 있습니다.

주()가 포함된 단일 클래스가 있습니다.

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();
}

하지만 저는 두 가지 다른 Spring Application 수업이 있습니다.Application.class & CreateDB.class입니다.각 클래스는 서로 다른 클래스를 정의합니다.@ComponentScan경로가 다를 뿐만 아니라@EnableAutoConfiguration옵션 및 기타@Configuration옵션들.마지막으로 명령줄 인수를 기반으로 추가 프로필/등을 프로그래밍 방식으로 활성화할지 여부를 결정할 수 있습니다.

저의 경우, 다른 시작 프로그램이 DB 스키마를 만들고 종료하기를 원하기 때문에 명령줄 매개 변수를 강제로 적용했습니다.

저는 그 재산이 당신의 경우에는 적용되지 않을 것이라고 생각합니다.3개의 다른 "런처"가 있습니다(문서로 돌아가서 확인).병을 만드는 경우에는 JarLauncher 클래스를 사용합니다.속성으로 전환하는 경우Launcher 다음에 loader.main이 유용합니다.

META-INF/Manifest.MF

Main-Class: org.springframework.boot.loader.PropertiesLauncher

저는 싱글을 갖는 것을 제안하고 싶습니다.main그러나 스프링 프로파일(또는 구성 속성)을 사용하여 하나 이상의 "입구점"을 선택합니다.@Configuration학생들

언급URL : https://stackoverflow.com/questions/31076911/spring-boot-how-to-specify-an-alternate-start-class-multiple-entry-points

반응형