2017-11-18 3 views
1

제 의도는 스프링 부트 응용 프로그램에 개발 및 프로덕션 용 프로파일 두 개를 갖는 것입니다. 개발 프로필은 프로덕션 프로필의 일부 변수 (예 : 클라우드의 데이터베이스 대신 메모리 내장 데이터베이스)를 무시하기위한 것입니다. 앞으로 프로덕션 프로파일에 몇 가지 변경 사항이 적용될 것으로 예상되므로 개발 프로파일에서 변수를 복제하는 것이 해결책이 아닌 것 같습니다.스프링 "spring.profiles.include"가 대체됩니다.

그럼 spring.profiles.include은 참조 된 프로필의 속성 만 추가하기로되어 있지만 읽은 프로필의 속성은 추가 한 것으로 간주합니다. 따라서, 별도의 YAML 파일에 두 개의 프로파일 foo는 바을 갖는 경우 :

응용 프로그램 foo.yaml :

myproperty: 44 

응용 프로그램 bar.yaml :

spring: 
    profiles: 
    include: foo 
    active: bar,foo 
myproperty: 55 

그리고 -Dspring.profiles.active=bar 변수를 설정 IDE 일 때 myproperty의 런타임 값은 44입니다. 즉, barfoo으로 덮어 쓰여졌습니다.이 속성은 속성 만 추가하고 덮어 쓰지 않아야합니다. 응용 프로그램을 시작할 때 내가 얻을 :

다음 프로파일이 활성 : foo는, 바

제안 내가 다른 질문에,이 answer에 의해 application-bar.yaml- spring.profiles.active=bar을 추가

하지만 효과가 없습니다 - 속성이있을 때와 없을 때 차이가 없습니다 (또한 쉼표로 구분 된 값 대신 대시 목록을 사용하여 시도했습니다).

제 질문은 작동하는 방법입니다 (그러면 스프링 참조가 오도 된 것입니까?). 그렇다면 해결책이 있습니까?

link을 github의 응용 프로그램 소스 코드에 추가하십시오.

답변

1

우리는 약간 다른 방식으로 Spring 활성 프로파일을 구현했습니다. 기본 등록 정보 파일 application.yml에 프로덕션 및 개발 환경에서 모두 동일한 기본값이 모두 포함되어 있다고 가정 해 보겠습니다.

생산 및 개발 파일에 대해 각각 application-prd.ymlapplication-dev.yml이라는 별도의 속성을 만듭니다. 이러한 파일에는 추가 속성이 포함되어 있거나 일부 기본 속성을 무시할 수 있습니다.

응용 프로그램을 시작하는 동안 spring.profiles.active을 환경 변수로 전달합니다.application.yml

또는

-Dspring.profiles.active=dev

+0

고마워, 내 생각에 충분히 좋다고 생각해. 여전히 개발자가 사용자 정의 속성 파일을 덮어 쓸 수있게 만들지 않아도되므로 추가 파일을 만들 수 있습니다 (결국에는 application.yaml, application-foo.yaml 및 application-bar.yaml이 있습니다). 그러나 가능한 한 그것의 벌금 요구 사항을 충족. –

1

스프링 부트 설명서 here에 따르면 spring.profiles.include은 다른 프로필의 속성을 추가하는 데 사용됩니다. 속성이 활성 프로필에 없으면 다른 프로필의 속성을 추가합니다. 하지만 존재한다면 덮어 쓰기되고 마지막으로 적용될 것입니다.

+1

application.yml 내가 링크를 알고 함께 application-dev.yml을 데리러와 예를 들어,

-Dspring.profiles.active=prd

가 함께 application-prd.yml을 선택할 것 - 그것은 언급 "spring.profiles.inc lude 속성을 사용하여 무조건 활성 프로필을 추가 ​​할 수 있습니다. " -이 설명은 나에게 모호합니다. 하지만 괜찮아요, 그냥 다른 프로필에서 설정을 가져 오는 방법은 없지만, 현재 프로필을 덮어 쓰지 않으시겠습니까? –