programing

spring-boot에서 명령줄 인수 가져오기: run

megabox 2023. 2. 28. 23:24
반응형

spring-boot에서 명령줄 인수 가져오기: run

spring-boot 어플리케이션(mvn spring-boot:run)을 명령줄에서 실행할 때 인수를 입력하여 main()으로 가져올 수 있는 방법이 있습니까?

spring-boot-maven-plugin의 소스 코드를 보고 다음 작업을 수행해야 합니다.

mvn spring-boot:run -Drun.arguments="arg1,arg2"

다른 은 '보다 낫다'는 어떤 을 선택할 수 정보를 얻을 수 있는 방법은요.run의 of의 spring-boot합니다.

mvn help:describe -Dcmd=spring-boot:run -Ddetail

Spring Boot 2.x의 경우 소스가 여기에 있으므로 다음 명령을 사용해야 합니다.-Dspring-boot.run.arguments="args1,args2"

( ) 2.2의 경우 (2021년 4월) Spring Boot 2.2+를 -Dspring-boot.run.arguments="args1 args2"

Gradle에 할 수 .bootRun '작업'을 . 를 들어 '작업하다'는 과 같습니다

bootRun {
    if ( project.hasProperty('args') ) {
        args project.args.split('\\s+')
    }
}

해서 ''을 하게 됩니다.gradle bootRun -Pargs="arg1 arg2"

-Drun.arguments를 사용하여 여러 인수를 전달할 때 인수에 'comma-separated' 값이 있으면 각 인수의 첫 번째 값만 사용됩니다.이를 피하기 위해 인수를 값의 수만큼 반복합니다.

이것은 회피책에 가깝습니다.구분 기호가 '|'와 같지 않으면 다른 대안이 있는지 확실하지 않습니다.

예: 문제:

mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,dev"

위의 명령에 대해 '테스트' 프로파일만 선택합니다.

회피책:

mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,--spring.profiles.active=dev"

위 명령어의 'dev' 프로파일과 'test' 프로파일을 모두 선택합니다.

은 " "에 .spring-boot.major.major major major

TLDR

스프링 부트 1의 경우:

mvn spring-boot:run -Drun.arguments="argOne,argTwo"

스프링 부트 2.0 및 2.1의 경우:

mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"

( 2021년 4월부터 편집)스프링 부트 2.2 이후의 경우:

mvn spring-boot:run -Dspring-boot.run.arguments="argOne argTwo"

  1. spring-boot-maven-plugin 및 " " " 입니다.Spring Boot사용하는 버전을 정렬해야 합니다.

('스프링 부트')1 ★★★★★★★★★★★★★★★★★」2spring-boot-maven-plugin 1 ★★★2버전을 사용해야 합니다.
의 '' ''가pom.xml를 잇다spring-boot-starter-parent:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>ONE_OR_TWO_VERSION</version>
</parent>

pom에서는 이 플러그인의 의존관계가 상속되기 때문에 사용되는 플러그인의 버전도 지정할 수 없습니다.

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>                   
        <configuration>
           ...
        </configuration>
    </plugin>
</plugins>

★★★★★★★의 pom.xml에서 되지 않음spring-boot-starter-parentspring-boot-maven-plugin의 「」를 해 주세요.spring boot쓰고 싶구나.

  1. spring-boot-maven-plugin을 사용한 명령줄 인수 전달: 1.X.X

하나의 인수의 경우:

mvn spring-boot:run -Drun.arguments="argOne"

다중의 경우:

mvn spring-boot:run -Drun.arguments="argOne,argTwo"

maven 플러그인 페이지에 다음과 같이 기재되어 있습니다.

  Name         Type       Since           Description
arguments  |  String[]  |  1.0  | Arguments that should be passed 
                                  to the application. On command line use 
                                  commas to separate multiple arguments.
                                  User property is: run.arguments.
  1. spring-boot-maven-plugin을 사용한 명령줄 인수 전달: 2.X.X

하나의 인수의 경우:

mvn spring-boot:run -Dspring-boot.run.arguments="argOne"

다중의 경우:

mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"

그것을 나타내는 2.X.X 버전의 플러그인 문서를 찾을 수 없었습니다.
근데...org.springframework.boot.maven.AbstractRunMojo의 클래스spring-boot-maven-plugin:2.0.0.M3플러그인은 다음 사용자 속성을 나타냅니다.

public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo
   ...
   @Parameter(property="spring-boot.run.arguments")
   private String[] arguments;
   ...
   protected RunArguments resolveApplicationArguments(){
     RunArguments runArguments = new RunArguments(this.arguments);
     addActiveProfileArgument(runArguments);
     return runArguments;
   }
   ...
 }
  1. 힌트 : 여러 인수를 전달하면 쉼표 사이의 공백이 고려됩니다.

    mvn spring-boot: run - Dspring-boot.run . arguments = "argOne , argTwo "

로 해석될 것이다.["argOne", "argTwo"]

단, 이것은 다음과 같습니다.

mvn spring-boot:run -Dspring-boot.run.arguments="argOne, argTwo"

로 해석될 것이다.["argOne", " argTwo"]

(2021년 3월부터 편집)

이제 공백이 다중 인수 명령의 구분 기호로 사용됩니다. 관련 문제를 참조하십시오.

오늘 확인해보니 Spring Boot 2.2.5의 올바른 사용법은 다음과 같습니다.

mvn spring-boot:run -Dspring-boot.run.arguments="--arg1=value --arg2=value"

도움말에 다음과 같이 표시됩니다.

commandlineArguments
  User property: spring-boot.run.arguments
  Arguments from the command line that should be passed to the application.
  Use spaces to separate multiple arguments and make sure to wrap multiple
  values between quotes. When specified, takes precedence over arguments.

Spring Boot 1 as 2는 여러 프로파일을 인수로 전달하고 arg와 액티브프로파일로 전달된 값의 구분자로 사용되는 콤마와 관련된 문제를 회피하는 방법을 제공합니다.

그래서 글을 쓰는 대신:

mvn spring-boot:run -Dspring-boot.run.arguments=--spring.profiles.active=test,--spring.profiles.active=dev

Spring Boot Maven 속성을 사용합니다.이것은 편리한 숏컷입니다.spring.profiles.active예를 들어 다음과 같습니다.

Maven 사용자 속성은 Spring Boot 버전에 따라 다릅니다.

Spring Boot 1.4+의 경우, 즉run.profiles:

mvn spring-boot:run -Drun.profiles=dev,test

Spring Boot 2의 경우, 즉spring-boot.run.profiles:

mvn spring-boot:run -Dspring-boot.run.profiles=dev,test

플러그인 매뉴얼에서 다음 순서를 수행합니다.

프로파일:

활성화할 스프링 프로파일.'spring.profiles.active' 인수를 지정하는 바로 가기입니다.명령줄에서는 콤마를 사용하여 여러 프로파일을 구분합니다.

java.lang 이라고 입력합니다.문자열[]

이후: 1.3

필수:아니요.

사용자 속성: spring-boot.run.profiles

봄을 쓰고 있어요.boot 2.4.2와 i는 인수를 withe-space로 구분하고 값을 큰따옴표로 묶습니다.

mvn spring-boot:run -Dspring-boot.run.arguments="--param1=value2 --param2=value2"

그리고 만약 이클립스를 쓴다면...

| 파라미터 이름 | 값 || run.time | "--name=Adam" |

이것이 나에게 효과가 있었다.spring-boot v1.4.3.RELEASE),.

mvn spring-boot:run -Dspring.profiles.active=test,local -Dlogback-debug=true

스프링의 최신 버전은 아래 예시와 같이 -Dspring-boot.run.arguments=를 사용합니다.

spring-boot:run -Djasypt.encryptor.password=temp -Dspring-boot.run.arguments="OU,Grade"

Spring Boot 어플리케이션에서는 다음 명령을 사용합니다.

mvn spring-boot:run -Dspring-boot.run.arguments="--java.net.preferIPv4Stack=true --config.password=PASSWORD --config.token=s.TOKEN --spring.application.name=ENV --config.server.ip=IP_ADDRESS --spring.profiles.active=ENV --spring.profiles.active.custom=ENV_custom"

언급URL : https://stackoverflow.com/questions/23316843/get-command-line-arguments-from-spring-bootrun

반응형