Spring

Spring Boot의 명령줄 인수

기록만이살길 2022. 12. 3. 23:11
반응형

1. 개요

이 빠른 사용방법(예제)에서는 명령줄 인수를 Spring Boot 애플리케이션에 전달하는 방법에 대해 설명합니다.

명령줄 인수를 사용하여 애플리케이션을 구성하고 애플리케이션 속성을 재정의하거나 사용자 지정 인수를 전달할 수 있습니다.

2. Maven 명령줄 인수

먼저 Maven 플러그인을 사용하여 애플리케이션을 실행하는 동안 인수를 전달하는 방법을 살펴보겠습니다.

나중에 코드에서 인수에 액세스하는 방법을 살펴보겠습니다.

2.1. 스프링 부트 1.x

Spring Boot 1.x의 경우 -Drun.arguments 를 사용하여 애플리케이션에 인수를 전달할 수 있습니다 .

mvn spring-boot:run -Drun.arguments=--customArgument=custom

앱에 여러 매개변수를 전달할 수도 있습니다.

mvn spring-boot:run -Drun.arguments=--spring.main.banner-mode=off,--customArgument=custom

참고:

  • 인수는 쉼표로 구분해야 합니다.
  • 각 인수는 —로 시작해야 합니다.
  • 위의 예에 표시된 spring.main.banner-mode 와 같은 구성 속성을 전달할 수도 있습니다 .

2.2. 스프링 부트 2.x

Spring Boot 2.x의 경우 -Dspring-boot.run.arguments 를 사용하여 인수를 전달할 수 있습니다 .

mvn spring-boot:run -Dspring-boot.run.arguments=--spring.main.banner-mode=off,--customArgument=custom

3. Gradle 명령줄 인수

다음으로 Gradle Plugin을 사용하여 애플리케이션을 실행하는 동안 인수를 전달하는 방법을 알아보겠습니다.

build.gradle 파일 에서 bootRun 작업 을 구성해야 합니다.

bootRun {
    if (project.hasProperty('args')) {
        args project.args.split(',')
    }
}

이제 다음과 같이 명령줄 인수를 전달할 수 있습니다.

./gradlew bootRun --args=--spring.main.banner-mode=off,--customArgument=custom

4. 시스템 속성 재정의

사용자 지정 인수를 전달하는 것 외에 시스템 속성을 재정의할 수도 있습니다.

예를 들어 다음은 application.properties 파일입니다.

server.port=8081
spring.application.name=SampleApp

server.port 값 을 재정의하려면 다음과 같은 방식으로 새 값을 전달해야 합니다(Spring Boot 1.x의 경우).

mvn spring-boot:run -Drun.arguments=--server.port=8085

마찬가지로 Spring Boot 2.x의 경우:

mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085

참고:

  • Spring Boot는 명령줄 인수를 속성으로 변환하고 환경 변수로 추가합니다.
  • application.properties 에서 자리 표시자를 사용하여 –server.port= 8085 대신 짧은 명령줄 인수 –port=8085 를 사용할 수 있습니다 .
    server.port=${port:8080}
  • 명령줄 인수는 application.properties 값 보다 우선합니다.

필요한 경우 응용 프로그램이 명령줄 인수를 속성으로 변환하는 것을 중지할 수 있습니다.

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(Application.class);
        application.setAddCommandLineProperties(false);
        application.run(args);
    }
}

5. 명령줄 인수 액세스

응용 프로그램의 main() 메서드 에서 명령줄 인수에 액세스하는 방법을 살펴보겠습니다 .

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    public static void main(String[] args) {
        for(String arg:args) {
            System.out.println(arg);
        }
        SpringApplication.run(Application.class, args);
    }
}

이렇게 하면 명령줄에서 응용 프로그램에 전달한 인수가 인쇄되지만 나중에 응용 프로그램에서 사용할 수도 있습니다.

6. SpringBootTest 에 명령줄 인수 전달

Spring Boot 2.2 릴리스와 함께 @SpringBootTest 및 해당 args 속성 을 사용하여 테스트 중에 명령줄 인수를 주입할 수 있는 가능성을 얻었습니다 .

@SpringBootTest(args = "--spring.main.banner-mode=off")
public class ApplicationTest {

    @Test
    public void whenUsingSpringBootTestArgs_thenCommandLineArgSet(@Autowired Environment env) {
        Assertions.assertThat(env.getProperty("spring.main.banner-mode")).isEqualTo("off");
    }
}

7. 결론

이 기사에서는 명령줄에서 Spring Boot 애플리케이션에 인수를 전달하는 방법과 Maven과 Gradle을 모두 사용하여 이를 수행하는 방법을 배웠습니다.

또한 애플리케이션을 구성하기 위해 코드에서 이러한 인수에 액세스하는 방법도 보여 주었습니다.

Generic footer banner
참고
  • https://docs.spring.io/spring-framework/docs/current/reference/html
  • https://www.baeldung.com/spring-boot-command-line-arguments
반응형