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