programing

웹 애플리케이션과 명령줄 애플리케이션 모두에서 스프링 부트 애플리케이션을 실행하는 방법은 무엇입니까?

instargram 2023. 7. 21. 20:34
반응형

웹 애플리케이션과 명령줄 애플리케이션 모두에서 스프링 부트 애플리케이션을 실행하는 방법은 무엇입니까?

현재 사용하려고 합니다.CommandLineRunner와 함께ConfigurableApplicationContext기본적으로 웹 응용 프로그램과 필요 시 독립 실행형 명령줄 응용 프로그램(명령줄 매개 변수를 통해) 모두에서 스프링 부트 응용 프로그램을 실행합니다.프로그램 인수가 제공될 때 콘솔 응용 프로그램으로만 실행하는 방법을 찾는 데 어려움을 겪고 있습니다.어떤 제안이든 도움이 될 것입니다.

저도 같은 요구사항이 있었습니다.이것이 제가 그것을 성취할 수 있었던 방법입니다.

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplicationBuilder app = new SpringApplicationBuilder(Application.class);
        if (args.length == 0) { // This can be any condition you want
            app.web(WebApplicationType.SERVLET);
        } else {
            app.web(WebApplicationType.NONE);
        }
        app.run(args);
    }
}

이것은 콘솔 애플리케이션 실행기입니다.

@Component
@ConditionalOnNotWebApplication
public class ConsoleApplication implements CommandLineRunner {
    @Override
    public void run(String... args) {
        System.out.println("************************** CONSOLE APP *********************************");
    }
}

사용자가bootJar응용프로그램을 웹 앱으로 실행할 수 있습니다.java -jar app.jar명령행 앱으로 사용할 수 있습니다.java -jar app.jar anything #based on the condition you specified.

이게 도움이 되길 바랍니다.

편집:

이를 위한 더 나은 방법은 Application.java를 다음과 같이 변경하고 위와 같이 ConsoleApplication.java를 유지하는 것입니다.

@SpringBootApplication
public class Application {

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

그리고 실행합니다.bootJar와 함께java -jar -Dspring.main.web-application-type=NONE app.jar응용 프로그램을 콘솔 응용 프로그램으로 실행합니다.그리고 어떤 것도 통과하지 않는 것.spring.main.web-application-type웹 응용 프로그램으로 실행됩니다.

CommandLineRunner인터페이스는 응용 프로그램이 시작된 후 명령줄 인수를 선택하는 유용한 방법을 제공하지만 응용 프로그램의 특성을 변경하는 데는 도움이 되지 않습니다.이미 알고 있듯이, 수신되는 웹 요청을 처리해야 한다고 생각하기 때문에 응용 프로그램이 종료되지 않을 수 있습니다.

당신의 주된 방법으로 취한 접근법은 제가 보기에 합리적인 것 같습니다.Spring Boot에 웹 응용 프로그램이 아니므로 시작된 후 수신 요청을 듣기 위해 시간을 낭비하지 않아야 합니다.

저는 다음과 같은 일을 할 것입니다.

public static void main(String[] args) {
    SpringApplication application = new SpringApplication(AutoDbServiceApplication.class);
    application.setWeb(ObjectUtils.isEmpty(args);
    application.run(args);
}

그러면 응용 프로그램이 올바른 모드로 시작됩니다.그러면 다음을 사용할 수 있습니다.CommandLineRunner현재와 같은 방식으로 콩을 만듭니다.또한 다음을 참조하십시오.ApplicationRunnerAPI가 조금 더 우수합니다.

@Component
public class AutoDbApplicationRunner implements ApplicationRunner {

    public void run(ApplicationArguments args) {
        if (ObjectUtils.isEmpty(args.getSourceArgs)) {
            return; // Regular web application
        }
        // Do something with the args.
        if (args.containsOption(“foo”)) {
            // …
        }
    }

}

당신이 정말 원하지 않는다면.AutoDbApplicationRunner나중에 사용할 수 있는 주요 방법으로 프로필을 설정할 수도 있습니다(참조).SpringApplication.setAdditionalProfiles).

언급URL : https://stackoverflow.com/questions/45615729/how-to-run-spring-boot-application-both-as-a-web-application-as-well-as-a-comman

반응형