복붙노트

[SPRING] Spring 3.1 PropertySourcesPlaceholderConfigurer 및 조건부 가져 오기

SPRING

Spring 3.1 PropertySourcesPlaceholderConfigurer 및 조건부 가져 오기

3.1 (http://blog.springsource.org/2011/02/15/spring-3-1-m1-unified-property-management/)의 새 스프링 속성 지원을 살펴보면 다음과 같이 가능할 것으로 보입니다.

<context:property-placeholder location="/WEB-INF/application-customer-dev.properties,classpath:application-customer.properties" ignore-resource-not-found="true"/>

<import resource="classpath*:com/x/core/security/security-${login.security}.xml"/>

여기서 login.security는 application-customer-dev.properties에 다음과 같습니다.

login.security=dev

(security-dev.xml은 적절한 위치에 존재합니다). login.security를 ​​확인할 수 없기 때문에 나는 뭔가를 놓치고 있습니다. 3.1 이전 버전의 스프링에서이 동작이 일어날 것으로 예상되지만, 3.1 (우리가 사용하고있는)에서 유효해야합니다.

해결법

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

    1.링크의 각주 [2] :

    링크의 각주 [2] :

    [2] : BeanFactoryPostProcessors가 호출되기 전에 요소의 처리가 반드시 발생하기 때문에 PropertyPlaceholderConfigurer조차 여기에서 도움이되지 못합니다. 환경 및 PropertySource 집합이 컨테이너 새로 고침 전에 구성되기 때문에 요소의 자리 표시자는 라이프 사이클 문제없이 환경에 대해 해결 될 수 있습니다.

    최신 정보:

    PropertySourcesPlaceholderConfigurer에 대한 javadoc에 따르면 PropertySourcesPlaceholderConfigurer는 BeanFactoryPostProcessor이므로 각주가 실제로 말하는 것은 PropertySourcesPlaceholderConfigurer가 설치되기 전에 가져 오기가 완료되므로 실제로 작동하지 않는다는 것입니다 (실제로 가 해결 될 때). 구성자는 아직 존재하지 않을 수도 있습니다!) 예, 설치되면 환경을 볼 수 있지만 그 시점에는 가 작동하지 않으므로 내부에서이를 해결할 수 없습니다. 여기에는 PropertySourcesPlaceholderConfigurer가 포함됩니다.

    기본적으로 봄 XML 컨텍스트 설정은 다음과 같이 다소 차이가납니다.

    이것은 많은 포스트 프로세서의 order 속성을 사용하여 BeanFactoryPostProcessor (PropertyPlaceholderConfigurer가 @PersistenceContext에서 자리 표시자를 해결하는 것과 같은 작업을 수행하기 전에)를 적용 할 수없는 것과 비슷한 문제입니다.이 동작은 Spring 응용 프로그램에서 하드 코드됩니다 컨텍스트이므로 일부 Spring 클래스를 전문으로 처리해야한다.

  2. ==============================

    2.나는 당신이 블로그를 조금 잘못 읽고 있다고 생각한다. @ Kurt - bean 정의가 생성되기 전에 속성을 포함하고있는 속성 소스가 존재한다면 해결되어야한다.

    나는 당신이 블로그를 조금 잘못 읽고 있다고 생각한다. @ Kurt - bean 정의가 생성되기 전에 속성을 포함하고있는 속성 소스가 존재한다면 해결되어야한다.

    따라서 가져 오기를 가져 오는 방법은 다음 두 가지 방법으로 해결됩니다. 1. 기본적으로 등록 정보 소스로 등록 될이 매개 변수 (-Dlogin.security = dev)로 환경 변수를 설정하십시오 2. 속성 소스를 등록하기 위해 사용자 정의 ApplicationContextInitializer를 작성하여 블로그 기사에서 언급 한 것처럼 프로그래밍 방식으로 속성 소스로 파일을 등록하십시오. ResourcePropertySource를 사용하여 파일 기반 속성 소스를 등록 할 수 있어야합니다

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

    3.@Inject Environment와 프로파일을 사용하여 지금 필요한 것이 훨씬 쉬워 질 것입니다. 파일 이름의 일부를 대체 할 필요는 없습니다.

    @Inject Environment와 프로파일을 사용하여 지금 필요한 것이 훨씬 쉬워 질 것입니다. 파일 이름의 일부를 대체 할 필요는 없습니다.

  4. from https://stackoverflow.com/questions/9218694/spring-3-1-propertysourcesplaceholderconfigurer-and-conditional-import by cc-by-sa and MIT license