2012-11-12 2 views
2

저는 Spring의 새로운 Environment 지원을 사용하여 사용자 정의 속성 자리 표시자를 이식하려고하고 있지만 현재 자리 표시 자 마술에서 얻는 결과를 얻는 방법을 알 수 없습니다.속성 Spring 3.1의 자리 표시 자 상속

내가 원하는 것은 속성 파일의 기본 묶음을 classpath에서 읽은 다음 그 속성을 다른 곳에서 많은 속성 파일로 오버라이드 (오버레이)하도록하는 것입니다. 다른 파일 그룹에 설정된 속성 만 모든 속성을 바꾸는 것은 좋지 않습니다.

public class ConfigResourcesFactoryBean implements FactoryBean<Resource[]> { 
// Loads a bunch of Resources (property files) 
// based on System.property/Environment variable "customConfig" 
} 
이 이 이

이제 customConfig가 설정 될 수 있습니다

3.1

<bean class="com.snaphop.spring.ConfigResourcesFactoryBean" id="customConfig"> 
    <property name="parameterName" value="customConfig"/> 
    <property name="defaultResources" value="classpath*:META-INF/spring/*.properties"/> 
</bean> 

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" id="customPropertyPlaceholder"> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> 
    <property name="locations" ref="customConfig"/> 
</bean> 

봄에 앞서 이제 ConfigResourcesFactoryBean은 자리 표시 자 설정에 공급하는 자원의 목록을 찾는 마법의 FactoryBean이다 -DcustomConfig=file://blah/*.properties 또는 export customConfig=file://blah/*.properties입니다.

blah 디렉토리의 등록 정보는 classpath*:META-INF/spring/*.properties의 서브 세트 만 대체합니다. 따라서 공장에서 반품 된 Resource[]은 각각 classpath*:META-INF/spring*.properties,이어서 file://blah/*.properties의 합집합이됩니다.

이제 내 Resource[] 공장 대신에 PropertySources 사용자 지정을 만들고 PlaceholderConfig에 와이어를 연결할 수 있지만 위의 경우 값이없는 것처럼 보입니다.

서블릿 환경에서만 작동하므로 통합 테스트가 작동하지 않는다고 맹세했기 때문에 ApplicationContextInitializer을 사용할 수 없습니다. (환경 테스트를 수행 할 때마다 단위 테스트 하나 하나에 주석을 추가하는 기분이 들지 않습니다. 이전처럼 시스템 속성을 설정할 수있을 때입니다.)

하드 코드 된 소스의 등록 정보를 사용자 정의 소스로 오버레이/구현하지 않고 어떻게 오버레이/구현해야합니까?

+0

다소 비슷합니다 : http://stackoverflow.com/questions/8587489/how-to-set-active-spring-3-1-environment-profile-via-a-properites-file-and-not-v –

답변

0

초과 근무 원래의 구성 해결 코드를 새 Spring Environment 방식으로 천천히 포팅했습니다.

내가이 StackOverflow의 질문에 대해 이야기 : 당신은 code as a Gist을보고 나는 나의 봄 프로젝트의 대부분을 사용하는 것과 동일한 구성 논리를 사용할 수 있습니다 How can I easily switch between environment specific runtime configuration with IntelliJ?

.

슬픈 듯이 단위 테스트의 경우 Context Initializer는 실제로 Spring 3.2에서만 작동합니다. updated @ContextConfiguration Annotation을 참조하십시오. Spring 3.1 및 이전 버전을 사용하는 프로젝트에 대한 기존 사용자 지정 속성 자리 표시자를 사용해야했습니다.