복붙노트

[SPRING] 시스템 속성을 Gradle 작업에 전달하는 방법

SPRING

시스템 속성을 Gradle 작업에 전달하는 방법

Gradle spring-boot 플러그인을 사용하고 있으며 테스트 실행을 위해 스프링 활성 프로필을 선택해야합니다.

spring.profiles.active 시스템 속성을 bootRun 플러그인의 작업에 어떻게 전달합니까?

무엇이 이미 실패 했는가?

task bootRunLocal {
    systemProperty "spring.profiles.active", "local"
    System.setProperty("spring.profiles.active", "local")
    tasks.bootRun.execute() // I suspect that this task is executed in a separate JVM
}

일부 명령 행 마법도 실패합니다.

./gradle -Dspring.profiles.active=local bootRun

누군가 내 문제를 해결하는 데 친절하게 도움을 줄 수 있습니까?

답변 및 의견에서 업데이트 :

systemProperty를 설정하고 다음을 수행하여 스프링 컨테이너에 전달할 수 있습니다.

run {
    systemProperty "spring.profiles.active", "local"
}

그러나 이렇게하면 로컬 프로필이 bootRun 작업과 bootRunLocal 작업에 모두 설정됩니다. 내가 bootRunLocal 작업에 대한이 속성을 설정하고 bootRunLocal에서 booRun 작업을 호출하는 방법이 필요합니다.

이것은 매우 간단하게 들릴지 모르겠지만, 나는 Maven의 구조화 된 세계로부터 평화롭게 왔습니다.

해결법

  1. ==============================

    1.

    task local {
        run { systemProperty "spring.profiles.active", "local" }
    }
    
    bootRun.mustRunAfter local
    

    그런 다음 gradle 명령을 다음과 같이 실행하십시오.

    gradle bootRun local
    
  2. ==============================

    2.나는 내가 늦었다는 것을 알고있다. 그러나 나는 최근에이 정확한 문제에 직면했다. 명령 줄에서 spring.profiles.active 및 spring.config.location을 시스템 등록 정보로 설정하여 bootRun을 시작하려고했습니다.

    나는 내가 늦었다는 것을 알고있다. 그러나 나는 최근에이 정확한 문제에 직면했다. 명령 줄에서 spring.profiles.active 및 spring.config.location을 시스템 등록 정보로 설정하여 bootRun을 시작하려고했습니다.

    따라서 명령 행 "마법"을 작동 시키려면 build.gradle에 이것을 추가하십시오.

    bootRun {
        systemProperties System.properties
    }
    

    그런 다음 명령 줄에서 실행 중 ...

    gradle -Dspring.profiles.active=local bootRun
    

    env 변수를 추가하기 위해 별도의 작업을 정의 할 필요없이 활성 프로파일로 local을 설정합니다.

  3. ==============================

    3.시스템 속성을 작업에 전달하는 일반적인 방법은 없습니다. 요컨대, 그것은 별도의 JVM을 포크하는 작업에만 지원됩니다.

    시스템 속성을 작업에 전달하는 일반적인 방법은 없습니다. 요컨대, 그것은 별도의 JVM을 포크하는 작업에만 지원됩니다.

    위에서 정의 된 bootRunLocal 태스크는 별도의 JVM에서 실행되지 않으며 태스크의 execute () 호출은 지원되지 않습니다 (어떤 경우 든 실행 단계에서 발생해야합니다). 반면, 테스트는 항상 별도의 JVM에서 실행됩니다 (테스트 태스크에 의해 실행되는 경우). 테스트 실행을위한 시스템 속성을 설정하려면 해당하는 테스트 작업을 구성해야합니다. 예 :

    test {
        systemProperty "spring.profiles.active", "local"
    }
    

    자세한 내용은 Gradle Build Language Reference의 Test를 참조하십시오.

  4. ==============================

    4.아래의 gradle 2.14에서는 예제가 작동합니다. 나는 아래와 같이 추가했다. System.properties [ 'spring.profiles.active']가 null이면 기본 프로필이 설정됩니다.

    아래의 gradle 2.14에서는 예제가 작동합니다. 나는 아래와 같이 추가했다. System.properties [ 'spring.profiles.active']가 null이면 기본 프로필이 설정됩니다.

      bootRun {
           systemProperty 'spring.profiles.active', System.properties['spring.profiles.active']
        }
    

    명령 줄 예제

    gradle bootRun -Dspring.profiles.active=dev
    
  5. ==============================

    5.누구나이 문제가있는 경우 참조 용으로 만 사용하십시오.

    누구나이 문제가있는 경우 참조 용으로 만 사용하십시오.

    블라드 (Vlad)의 대답은 나에게 도움이되지 못했지만 2.4에 잘 맞습니다.

    task local <<{
        bootRun { systemProperty "spring.profiles.active", "local" }
    }
    local.finalizedBy bootRun
    

    그 다음에는 그레이 스케일 로컬

  6. ==============================

    6.

    SPRING_PROFILES_ACTIVE=local gradle clean bootRun
    

    이것은 이것과 이것에 따라 작동하며 작동합니다.

  7. ==============================

    7.OP의 정확한 요청에 응답하는 중 ...

    OP의 정확한 요청에 응답하는 중 ...

    그리고 바이 패스라고 가정하면 "OP는 명령 행에서 패스"또는 "IDE 호출에서 패스"를 의미합니다 ... 이것은 내가 그것을하는 방법입니다.

    build.gradle에 다음을 추가하십시오.

    /**
     * Task from spring-boot-gradle-plugin, configured for easier development
     */
    bootRun {
        /* Lets you pick Spring Boot profile by system properties, e.g. gradle bootRun -Dspring.profiles.active=dev */
        systemProperties = System.properties
    }
    

    그런 다음이를 호출 할 때 익숙한 Java 플래그를 사용하여 시스템 특성을 설정하십시오

    gradle bootRun -Dspring.profiles.active=local
    

    환경 변수 옵션 (SPRING_PROFILES_ACTIVE = local gradle bootRun)에 비해 시스템 속성을 고수하는 것이 한 가지 주요 이점이며, Linux / OS X (bash 등)와 Windows (cmd.exe와 어쨌든)간에 쉽게 이식 할 수 있습니다.

    나는이 블로그 게시물에서 이런 식으로 배웠다.

    (업데이트 : 어쨌든 나는 같은 제안으로 @ Erich의 응답을 놓쳤다 .Opp! 나는 이식성에 대한 추가 세부 사항 때문에 나의 대답을 떠날 것이다.)

  8. ==============================

    8.태스크를 실행하기 전에 org.springframework.boot.gradle.run.BootRunTask를 확장하고 특성을 확장 할 새로운 태스크 (이름이 bootRunLocal 인 경우)를 작성할 수 있습니다. 다음 코드를 사용하여 이러한 작업을 만들 수 있습니다.

    태스크를 실행하기 전에 org.springframework.boot.gradle.run.BootRunTask를 확장하고 특성을 확장 할 새로운 태스크 (이름이 bootRunLocal 인 경우)를 작성할 수 있습니다. 다음 코드를 사용하여 이러한 작업을 만들 수 있습니다.

    task bootRunLocal(type: org.springframework.boot.gradle.run.BootRunTask) {
        doFirst() {
            main = project.mainClassName
            classpath = sourceSets.main.runtimeClasspath
            systemProperty "spring.profiles.active", "local"
        }
    }
    

    자세한 내용은 여기에서 확인할 수 있습니다. https://karolkalinski.github.io/gradle-task-that-runs-spring-boot-aplication-with-profile-activated/

  9. ==============================

    9.작동 방식 :

    작동 방식 :

  10. ==============================

    10.SpringBoot 2.0.0-M5부터 시작 setSystemProperties ()는 더 이상 bootRun 작업의 메소드가 아닙니다. build.gradle을 (으)로 업데이트해야합니다.

    SpringBoot 2.0.0-M5부터 시작 setSystemProperties ()는 더 이상 bootRun 작업의 메소드가 아닙니다. build.gradle을 (으)로 업데이트해야합니다.

    bootRun {
        execSpec {
            // System.properties["spring.profiles.active"]
           systemProperties System.properties
        }
    }
    

    이것은 springBoot의 실행 태스크가 org.gradle.process.JavaExecSpec을 사용하는 것과 같습니다.

    이것은 나를 위해 Gradle 4.2를 사용하여 작동합니다.

  11. ==============================

    11.spring-boot-gradle-plugin 문서에 따르면 다음과 같은 인수를 전달할 수 있어야합니다.

    spring-boot-gradle-plugin 문서에 따르면 다음과 같은 인수를 전달할 수 있어야합니다.

    ./gradlew bootRun --args='--spring.profiles.active=dev'
    

    이것은 4.9부터 새로운 그라데이션 기능입니다. 나는 그것을 프로젝트에서 사용했고 상자에서 일했습니다.

  12. ==============================

    12.run 명령을 사용하여 {systemProperties = System.properties}를 실행하는 파일을 빌드하고 gradle run으로 시작할 수 있습니다. -Dspring.profiles.active = local

    run 명령을 사용하여 {systemProperties = System.properties}를 실행하는 파일을 빌드하고 gradle run으로 시작할 수 있습니다. -Dspring.profiles.active = local

  13. ==============================

    13.gradle 작업을 지원할 필요가없는 다른 방법 : JAVA_TOOL_OPTIONS 환경 변수를 설정하십시오.

    gradle 작업을 지원할 필요가없는 다른 방법 : JAVA_TOOL_OPTIONS 환경 변수를 설정하십시오.

    JAVA_TOOL_OPTIONS='-Dfoo=bar' gradle ...
    

    또는 변수에 이미 유용한 내용이 포함되어있을 수 있습니다.

    JAVA_TOOL_OPTIONS="$JAVA_TOOL_OPTIONS -Dfoo=bar" gradle ...
    
  14. ==============================

    14.

    // defualt value
    def profiles = 'dev'
    
    bootRun {
        args = ["--spring.profiles.active=" + profiles]
    }
    

    다음과 같이 gradle 작업을 시작할 때 특정 버전을 선택할 수 있습니다.

    ./gradlew bootRun -P dev
    

    "dev"는 "prod"

  15. from https://stackoverflow.com/questions/23367507/how-to-pass-system-property-to-gradle-task by cc-by-sa and MIT license