복붙노트

[SPRING] SpringApplication.run main 메소드

SPRING

SpringApplication.run main 메소드

Eclipse에서 Spring Starter 프로젝트 템플릿을 사용하여 프로젝트를 만들었습니다.

자동으로 Application 클래스 파일을 만들었고 해당 경로가 POM.xml 파일의 경로와 일치하므로 모두 정상입니다. 다음은 Application 클래스입니다.

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        //SpringApplication.run(ReconTool.class, args);  
        ReconTool.main(args);
    }
}

이것은 빌드하고있는 명령 행 응용 프로그램이며 실행하려면 SpringApplication.run 행을 주석 처리하고 다른 클래스의 main 메소드를 추가하여 실행해야합니다. 이 빠른 jerry-rig 외에도 Maven을 사용하여 빌드 할 수 있으며 Spring 애플리케이션, 일종의 것으로 실행됩니다.

그러나 나는 그 라인을 주석 처리 할 필요가 없으며 전체 Spring 프레임 워크를 사용할 것이다. 어떻게해야합니까?

해결법

  1. ==============================

    1.이 메서드는 전체 Spring Framework를 시작하기 때문에 Application.run ()을 실행해야합니다. 아래의 코드는 main ()을 Spring Boot와 통합합니다.

    이 메서드는 전체 Spring Framework를 시작하기 때문에 Application.run ()을 실행해야합니다. 아래의 코드는 main ()을 Spring Boot와 통합합니다.

    @Configuration
    @ComponentScan
    @EnableAutoConfiguration
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    
    @Component
    public class ReconTool implements CommandLineRunner {
    
        @Override
        public void run(String... args) throws Exception {
            main(args);
        }
    
        public static void main(String[] args) {
            // Recon Logic
        }
    }
    

    이 방법으로 인해 스프링이 완전히 구성되지 않았습니다 (구성 요소 스캔 등 없음). run ()에 정의 된 bean 만 작성됩니다 (ReconTool).

    프로젝트 예 : https://github.com/mariuszs/spring-run-magic

  2. ==============================

    2.사용 :

    사용 :

    @ComponentScan
    @EnableAutoConfiguration
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);  
    
            //do your ReconTool stuff
        }
    }
    

    모든 상황에서 작동합니다. IDE에서 응용 프로그램을 시작하든 빌드 도구에서 시작하든 상관 없습니다.

    maven을 사용하면 mvn을 사용하십시오. spring-boot : run

    gradle에서는 gradle bootRun이됩니다.

    run 메소드에서 코드를 추가하는 대신 CommandLineRunner를 구현하는 Spring Bean을 사용하는 것이 좋습니다. 그 모습은 다음과 같습니다.

    @Component
    public class ReconTool implements CommandLineRunner {
    
        @Override
        public void run(String... args) throws Exception {
           //implement your business logic here
        }
    }
    

    Spring의 공식 가이드 저장소에서이 가이드를 확인하십시오.

    전체 스프링 부트 문서는 여기에서 찾을 수 있습니다.

  3. ==============================

    3.한 가지 더 많은 방법은 응용 프로그램을 확장하는 것입니다 (응용 프로그램이 부모를 상속하고 사용자 지정하는 것이므로). 그것은 부모와 그 commandlinerunner를 자동으로 호출합니다.

    한 가지 더 많은 방법은 응용 프로그램을 확장하는 것입니다 (응용 프로그램이 부모를 상속하고 사용자 지정하는 것이므로). 그것은 부모와 그 commandlinerunner를 자동으로 호출합니다.

    @SpringBootApplication
    public class ChildApplication extends ParentApplication{
        public static void main(String[] args) {
            SpringApplication.run(ChildApplication.class, args);
        }
    }
    
  4. from https://stackoverflow.com/questions/24271705/springapplication-run-main-method by cc-by-sa and MIT license