Spring Boot의 명령 줄 인수

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을 사용하여 애플리케이션을 실행하는 동안 인수를 전달하는 방법을 알아 봅니다.

우리는 우리의 구성해야합니다 bootRun의 에서 작업을 build.gradle 파일 :

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

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

./gradlew bootRun -Pargs=--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가 출시되면서 @SpringBootTestargs 속성을 사용하여 테스트 중에 명령 줄 인수를 삽입 할 수있는 가능성이 생겼 습니다 .

@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을 모두 사용하여이를 수행하는 방법을 배웠습니다.

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