IT이야기

스프링 부트 명령줄에서 활성 프로파일 및 구성 위치 설정

cyworld 2022. 5. 28. 10:13
반응형

스프링 부트 명령줄에서 활성 프로파일 및 구성 위치 설정

스프링 부트 어플리케이션이 있습니다.

어플리케이션에는 개발, 스테이징프로덕션의 3가지 프로파일이 있습니다.그래서 나는 3개의 파일이 있다.

  1. 응용 프로그램 개발.yml
  2. application-syslog.yml
  3. application-production.yml

application.yml은 내부에 있습니다.src/main/resources을 :.yml로 설정했습니다

spring:
  profiles.active: development

은 "Da' 3" 에 .C:\config더입니니다다

이클립스에는 gradle 플러그인을 사용하고 있습니다."bootRun"을 실행하려고 할 때 이클립스 시 그라들 구성의 명령줄 인수를 다음과 같이 설정합니다.

 -Dspring.profiles.active=staging -Dspring.config.location=C:\Config

그러나 명령줄 속성이 반영되지 않고 활성 프로파일이 항상 applications.yml 파일에서 언급한 대로 development로 설정됩니다.기타 C:\Config 폴더는 프로파일 고유의 설정 파일을 검색하지 않습니다.

뭔가 빠진 것 같아요.나는 지난 이틀 동안 그것을 알아내려고 노력했다.하지만 운이 없다.어떤 도움이라도 주시면 감사하겠습니다.

명령줄에서 스프링 속성을 추가하거나 재정의하는 방법은 두 가지가 있습니다.

옵션 1: Java 시스템 속성(VM 인수)

D 파라미터는 application.jar보다 앞에 있는 것이 중요합니다.

java -jar -Dspring.profiles.active=prod application.jar

옵션 2: 프로그램 인수

java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config

이를 VM-D 인수로 정의하는 것이 가장 좋습니다.스프링 부트 1.x 와 2.x 의 차이점에 주의해 주세요.

유효하게 하는 프로파일은, 커맨드 라인에서 지정할 수 있습니다.

Spring-Boot 2.x(마븐에서만 사용 가능)

-Dspring-boot.run.profiles=local

스프링 부트 1.x

-Dspring.profiles.active=local

maven에서의 사용 예:

스프링 부트 2.x

mvn spring-boot:run -Dspring-boot.run.profiles=local

스프링 부트 1.x 및 2.x

mvn spring-boot:run -Dspring.profiles.active=local

여러 프로파일의 경우 쉼표로 구분해야 합니다.

mvn spring-boot:run -Dspring.profiles.active=local,foo,bar
mvn spring-boot:run -Dspring-boot.run.profiles=local,foo,bar
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config

올바르지 않습니다.

다음 항목이어야 합니다.

--spring.profiles.active=staging --spring.config.location=C:\Config

나는 이것을 추가해야 했다.

bootRun {
    String activeProfile =  System.properties['spring.profiles.active']
    String confLoc = System.properties['spring.config.location']
    systemProperty "spring.profiles.active", activeProfile
    systemProperty "spring.config.location", "file:$confLoc"
}

이제 bootRun이 프로파일 및 설정 위치를 선택합니다.

@jst 포인터 감사합니다.

OS 환경변수 SPRING_PROFILES_ACTIVE를 설정하는 방법도 있습니다.

예:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

레퍼런스 : 액티브스프링 프로파일 설정 방법

다음 명령줄을 사용할 수 있습니다.

java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar

Maven 플러그인을 통해 프로파일을 설정할 경우 다음을 통해 수행해야 합니다.run.jvmArguments

mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"

debug 옵션 사용 시:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"

난 이 여행을 많은 사람들을 봐왔어..도움이 되었으면 좋겠다

당신의 문제는 패스가 "/"로 끝나지 않는 spring.config.location과 관련이 있다고 생각합니다.

문서를 인용하다

spring.config.location에 디렉토리가 포함되어 있는 경우(파일이 아닌) 디렉토리는 /로 끝납니다(로드하기 전에 spring.config.name에서 생성된 이름으로 추가됩니다).

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ #boot-boot-module-module-config-application-module-files

마이클 인의 답은 맞지만 더 나은 설명이 필요할 것 같아요!

얘기를 해주셨는데요.-D는 JVM 파라미터를 올바르게 지정하는 방법입니다.당신이 전적으로 옳습니다.그러나 Michael도 Spring Boot Profiles 문서에서 언급한 바와 같이 옳습니다.

하지 않은 것은 이 입니다.이 파라미터는 파라미터입니까?--spring.profiles.active인수 등)를 합니다.

프로필 위치 끝에 "/"를 추가하는 것을 도와주었습니다.

java -jar myjar.jar --spring.config.additional-location=env/ --spring.profiles.active=prod

Gradle을 사용하는 경우:

-Pspring.profiles.active=local

we we we name name name name name name name name name name name name name name name name name in in in in in in in in in in in in에 기재된 에 따라 자동으로 속성파일을 .spring.profiles.active 경로의 경우-Dspring.config.location

application-dev.properties

하고 있는 OS jar를 사용해야 ./-Dspring.config.location이치노

오류 : java.lang.InlawalStateException:구성 파일 위치 'file:/home/xyz/projectName/cfg'의 파일 확장자를 PropertySourceLoader에서 알 수 없습니다.디렉터리를 참조하려는 위치인 경우 디렉터리는 '/'로 끝나야 합니다.

java -Dspring.profiles.active=dev -Dspring.config.location=/home/xyz/projectName/cfg/ -jar /home/xyz/project/abc.jar

또는

java -jar /home/xyz/project/abc.jar --spring.profiles.active=dev --spring.config.location=/home/xyz/projectName/cfg/

이를 intellij에서 수행하는 방법은 다음과 같이 명령어로 환경변수를 설정하는 것입니다.

intelij에서의 테스트 셋업

이 경우 테스트하도록 프로파일을 설정합니다.

springboot 명령행에서 다른 프로파일을 사용하여 테스트를 실행할 때도 비슷한 문제가 있었습니다.처음에 프로파일을 설정하고 다음에 다음과 같이 test 명령을 실행하여 수정했습니다.

스텝 1 : SPRING_PROFILES_ACTIVE=test(mac/linux의 경우) 또는 SET SPRING_PROFILES_ACTIVE=test(Windows의 경우)를 내보냅니다.

스텝 2 : . / gradlew test --tests "com.maersk.snd.integration test.통합테스트 POC"

위의 명령어는 다음과 같이 조합할 수 있습니다.

spring_PROFILES_ACTIVE=test &.& gradlew test --test "com.maersk.snd.integration test"를 내보냅니다.통합테스트 POC"

애드온으로서, 에 기재되어 있는 속성이 있는 경우는,application.properties다음 속성을 사용할 수 있는 다른 구성 파일에서 해당 속성을 재정의해야 합니다.spring.config.additional-location(커맨드 라인에서 패스하기 때문에 -D를 사용합니다)이거는 1개가 있기 때문에application.properties서버 고유의 속성을 덮어쓰기 위해 사용되는 각 서버의 설정 폴더에 있는 외부 폴더와 jar 내부가 있습니다.

언급URL : https://stackoverflow.com/questions/31038250/setting-active-profile-and-config-location-from-command-line-in-spring-boot

반응형