2012-05-02 3 views
4

PropertyPlaceholderConfigurer가 현재 구성에서 작동하는 데 문제가 있습니다. (이 테스트 속성입니다) 나는 다음과 같은 한 default.properties 파일에서 다음PropertyPlaceholderConfigurer + PropertiesFactoryBean에서만 위치 속성을 확인합니다.

<bean id="myProperties" 
    class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="locations"> 
     <list> 
      <!-- Order matters, last one to create a property wins! --> 
      <value>classpath:default.properties</value> 
      <value>file:${MYAPP_PROPERTIES_LOCATION:badurl}/application.properties</value> 
      <value>file:${user.home}/developer.properties</value> 
     </list> 
    </property> 
    <property name="ignoreResourceNotFound" value="true"/> 

<bean id="propertyConfigurer" 
    class="org.springframework.beans.factory.config.PropertiesPlaceholderConfigurer"> 
    <property name="properties" ref="myProperties"/> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> 
    <property name="searchSystemEnvironment" value="true"/> 
</bean> 

: 내 applicationContext.xml에서 다음 코드 블록을 감안할 때 propertyConfigurer을 올바르게 : 작동 무엇

property1=prop1val 
property2=${property1} 

환경 변수 MYAPP_PROPERTIES_LOCATION과 시스템 변수 user.home을 모두 해결합니다. 그러나 최종 속성 개체는 factory bean에 의해 만들어지며 결과 속성은 [property1 = prop1val, property2 = $ {property1}]입니다.

이 구성을 사용하면 myproperties bean의 속성을 가져 와서 자리 표시자를 해결할 수 있습니까 ?? 나는 스프링 코드를 추적하는 것을 포함하여 많은 연구를 해왔다. 그리고 어떻게 그리고 왜 이것이 이루어지지 않는지를 알 수있다. 내가 놓친 몇 가지 설정이 있기를 바래요! 이게 내 첫 번째 게시물 그래서 내게 쉽게 :)

답변

1

당신은 봄과 속성 파일의 적절한 구성이 있습니다. 왜 파일에서 데이터를 읽을 수 있는지. 아래 말했다 재산 파일이므로 모든 너무을 무엇을하고 있는지 스프링 적절한이다,

property1=prop1val 
property2=${property1} 

기억

.... 나에게 조금 더 설명하자, 그것은 꽤 텍스트 파일입니다 키 값 쌍이 있고 변수를 사용할 수 없습니다. 여기에서 property1의 값을 property2으로 동적으로 복사하려는 경우에는 발생하지 않습니다. 그것은 우리가 속성 파일을 사용하는 방식이 아닙니다.

속성 파일은 키 - 값 쌍이있는 간단한 텍스트 파일입니다. 따라서 응용 프로그램이나 사용자의 applicationcontext.xml 파일에서 논리적으로 필요한 데이터를 구성 할 수 있도록 키를 원자 적으로 유지하십시오.

+0

base.dir에 비해이었다 log.dir 속성을 가지고있다 (당신이 이미 그것을 시도 확실하지하고 문제는 당신이 직면 한) 당신은 다음을 시도해보십시오 수 base.dir은이 파일들 중 어디에서든지 설정할 수 있습니다. 그런 다음 Log4J는이 디렉토리를 기반으로하는 리스너를 사용하여 구성됩니다. – guydog28

0

나는 왜 PropertiesFactoryBean을 사용하는지 잘 모르겠습니다. 난 정말 여기 달성하고 싶었다 무엇

<bean id="propertyConfigurer" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <!-- Order matters, last one to create a property wins! --> 
      <value>classpath:default.properties</value> 
      <value>file:${MYAPP_PROPERTIES_LOCATION:badurl}/application.properties</value> 
      <value>file:${user.home}/developer.properties</value> 
     </list> 
    </property> 
</bean> 
+0

이 구성에서 병합 된 등록 정보 bean을 어떻게 참조합니까? – guydog28

+0

당신은'property2'을 의미합니다! 병합 된 Properties bean이 무슨 뜻인지 모르시겠습니까? 내 말은 – Santosh

+0

, 내 현재 구성에서 나는이처럼 내 병합 된 속성에 액세스 : '@Autowired @Qualifier ("myProperties") 개인 속성 소품,' 그런 다음 내가 말하는 property2에 액세스 할 수 있습니다를'props.getProperty ("property2");' 당신의 경우에는 참조 할 'PropertiesFactoryBean'이 없습니다. – guydog28

관련 문제