1.13.2 PropertySource추출

Spring의 Environment추상화는 속성 소스의 구성 가능한 계층에 대한 검색 작업을 제공합니다. 다음 목록을 고려하십시오.

ApplicationContext ctx = new GenericApplicationContext();
Environment env = ctx.getEnvironment();
boolean containsMyProperty = env.containsProperty("my-property");
System.out.println("Does my environment contain the 'my-property' property? " + containsMyProperty);

이전 snippet에서는 my-property속성이 현재 환경에 정의되어 있는지 여부를 Spring에 묻는 높은 수준의 방법을 살펴 본다. 이 질문에 대답하기 위해 Environment 객체는 ropertySource 객체 집합을 검색합니다. PropertySource는 키 - 값 쌍의 소스에 대한 간단한 추상화이며 Spring의 StandardEnvironment는 두 개의 PropertySource 객체 (하나는 JVM 시스템 속성 세트 (System.getProperties())를 나타내는 컨테이너 인스턴스이고 다른 하나는 시스템 환경 변수 세트System.getenv()를 나타내는 하나의 PropertySource 객체로 구성됩니다).

이러한 기본 속성 소스는 StandardEnvironment독립 실행 형 응용 프로그램에서 사용하기 위해 제공됩니다.StandardServletEnvironment 서블릿 구성 및 서블릿 컨텍스트 매개 변수를 포함하는 추가 기본 등록 정보 소스가 채워집니다. 선택적으로 JndiPropertySource사용. 자세한 것은, javadoc를 참조 해주세요.

구체적으로, StandardEnvironment를 사용하면 런타임에 my-property 시스템 등록 정보 또는 my-propertyi 환경 변수가있는 경우 env.containsProperty ( "my-property")를 호출하면 true가 반환됩니다.

수행 된 검색은 계층 적입니다. 기본적으로 시스템 특성은 환경 변수보다 우선합니다. 따라서 my-property호출하는 동안 두 속성 모두에 속성이 설정 env.getProperty("my-property")되면 시스템 속성 값이 "이기고"반환됩니다. 속성 값은 병합되지 않고 선행 항목에 의해 완전히 오버라이드됩니다.

공통 StandardServletEnvironment인 경우 전체 계층 구조는 다음과 같으며 상단에 우선 순위가 가장 높은 항목이 있습니다.

  1. ServletConfig 매개 변수 (적용 가능한 경우 - 예 : DispatcherServlet컨텍스트의 경우 )

  2. ServletContext 매개 변수 (web.xml 컨텍스트 - 매개 변수 항목)

  3. JNDI 환경 변수 ( java:comp/env/항목)

  4. JVM 시스템 등록 정보 ( -D명령 줄 인수)

  5. JVM 시스템 환경 (운영 체제 환경 변수)

가장 중요한 점은 전체 메커니즘을 구성 할 수 있다는 것입니다. 아마도ㅜ 이 검색에 통합하려는 속성의 사용자 지정 소스가있을 수 있습니다. 이렇게하려면 구현하고 자신의 PropertySource 인스턴스를 현재 PropertySourcesEnvironment집합에 추가하십시오 . 다음 예제에서는이를 수행하는 방법을 보여줍니다.

ConfigurableApplicationContext ctx = new GenericApplicationContext();
MutablePropertySources sources = ctx.getEnvironment().getPropertySources();
sources.addFirst(new MyPropertySource());

앞의 코드에서 MyPropertySource는 검색에서 가장 높은 우선 순위로 추가되었습니다. my-property 속성이 있으면이 속성이 감지되어 다른 PropertySource의 my-property 속성을 사용하여 반환됩니다. MutablePropertySources API는 일련의 속성 소스를 정밀하게 조작 할 수있는 여러 메서드를 제공합니다.

Last updated