복붙노트

[SPRING] spring.profiles.include가 포함 된 프로필 포함은 include 대신 덮어 씌우기 것 같습니다.

SPRING

spring.profiles.include가 포함 된 프로필 포함은 include 대신 덮어 씌우기 것 같습니다.

몇개의 Spring Boot 어플리케이션의 설정 속성을 분할하려고합니다. 저는 Spring Boot 1.1.6을 사용하고 있습니다. 우리의 구성 속성은 일반적인 application.yml 스타일로 YAML로 표현됩니다. 공통 기본 매개 변수, 공통 DB 매개 변수 등을위한 다양한 프로필을 만들었습니다. Spring 부트 참조 문서에 언급 된 포함 기능을 사용하려고했지만 포함 및 포함되지 않은 것으로 작동하는 것으로 보입니다. 나. 내가 원하는 것의 정반대. application.yml에 다음 내용이 주어지면 막대 프로필이 활성화되어있을 때 속성 이름에 값 막대가 있어야하지만 대신 포함 된 프로필에서 foo로 설정됩니다. 포함 개념은 처음로드 된 것을 의미하고, 새 프로파일에 설정된 동일하게 명명 된 특성은 포함 된 프로파일의 특성보다 우선합니다. 서브 클래스가 슈퍼 클래스의 필드를 섀도 잉하고있는 것처럼, 서브 클래스의 모든 인스턴스는 섀도우 값을 반영합니다. 여기에 파일이 있습니다.

spring:
  profiles: foo
name: foo

--- # New YAML doc starts here

spring:
  profiles: 
    include: foo
  profiles: bar
name: bar

명시 적으로 활성화 된 "bar"프로필을 사용하여 테스트 케이스에서이 메서드를 실행하면 name 속성은 여전히 ​​foo가됩니다.

SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class);
SpringApplication app = builder.application();
builder.profiles("bar");
ConfigurableApplicationContext ctxt = app.run();
String name = ctxt.getEnvironment().getProperty("name"); // Is always "foo" much to my surprise

그러나 내가 include를 주석 처리하면 :

spring: 
profiles: bar
#  profiles: 
#    include: foo

내 코드에서 두 프로필을 명시 적으로 활성화하십시오.

builder.profiles("foo", "bar");

그러면 예상대로 작동하고 name 속성은 bar로 설정됩니다. YAML 파일에서 include를 처리하는 주된 이유는 실제 코드에 미치는 영향이 적기 때문이며 모든 프로파일 포함을 한 곳에서 관리 할 수 ​​있습니다. 다른 방법을 사용하면 프로필의 이름을 바꾸려면 프로필 문자열과 가능한 전체 @Profile 주석을 검색해야합니다. 확실히 오류가 발생하기 쉽습니다. 더 유연한 솔루션은 포함 된 프로필이 하위 프로필 값을 재정의하는지 여부를 명시 적으로 표현할 수있을 것이라고 생각합니다. 아마 뭔가 :

spring:
  profiles: bar
  profiles:
    include: foo
      override: false

어쩌면 여기서 뭔가를 놓친 것일 수도 있습니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 감사.

해결법

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

    1.foo에 대해 다음을 시도해 보아라. 바를 재정의하면, 내 솔루션에서 작동하는 것 같다.

    foo에 대해 다음을 시도해 보아라. 바를 재정의하면, 내 솔루션에서 작동하는 것 같다.

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

    편집 : 공식적으로 지원되지 않는 "해킹"이며 2016 버전 용입니다.

  2. from https://stackoverflow.com/questions/25985752/including-profiles-with-spring-profiles-include-seems-to-override-instead-of-inc by cc-by-sa and MIT license