2009-08-21 20 views
12

Bazı özellikleri, program çalıştırılıncaya kadar bilmediğim bir konumdan bir Bahar içeriğine yüklemeliyim. mülk yer tutucu buproperty-placeholder başka bir özellikten konum belirleme

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>  
<context:property-placeholder location="${my.location}"/> 
gibi

:

Bu yüzden hiçbir yerleşime sahip bir PropertyPlaceholderConfigurer olsaydı sistem özelliklerinden my.location içinde okurdum ve sonra bir bağlamda o yeri kullanırız düşündük

ancak bu işe ve ne de location="classpath:${my.location}"

yapar gelmez Paul

+0

Böyle iki tutucuları birleştirmek mümkün olmayacaktır - onlar ne demek istediğimi görürseniz, birbirini işleyemez BeanFactoryPostProcessors, konum. – skaffman

+0

evet, benim sorunum bu satırlar boyunca bir sorun olduğunu düşündüm –

+0

Aslında, bu Spring JIRA bir özellik isteği olarak dosyalama değerinde olabilir PropertyPlaceHolderConfigurer bir geliştirme gibi kokuyor. – skaffman

cevap

5

Burada sorun, özellik yer tutucu sözdizimini kullanarak bir özellik yer tutucu yapılandırmaya çalıştığınız :) Bu biraz tavuk ve yumurta durumu - bahar, özellik yer tutucu yapılandırılıncaya kadar ${my.location} yer tutucunuzu çözemez.

Bu tatmin edici değil, ama daha açık sözdizimi kullanarak bunu bodge olabilir:

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer"> 
    <property name="location"> 
     <bean class="java.lang.System" factory-method="getenv"> 
     <constructor-arg value="my.location"/> 
     </bean> 
    </property> 
</bean> 
+0

tatmin edici değil, ama en azından işe yarayabilir –

+0

Spring 3.1.3'ü kullanmam benim için çalışmıyor: org.springframework.beans.NotWritablePropertyException: Fasulye sınıfının geçersiz 'location' konumu [org.springframework.beans.factory.config .PropertyPlaceholderConfigurer]: Bean özelliği 'konum' yazılabilir değil veya geçersiz bir ayarlayıcı yöntemi vardır. Belirleyicinin parametre tipi, alıcının dönüş türüyle eşleşiyor mu? ' –

15

Sen biraz daha farklı bir yaklaşımla bunu yapabilirsiniz. Bunu nasıl yapılandıracağız. Varsayılan özellikleri yükledikten sonra bunları yapılandırılabilir bir konumdan özellikleriyle geçersiz kıldım. Bu benim için çok iyi çalışıyor.

<bean id="propertyPlaceholderConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
     <property name="locations"> 
      <list> 
       <value>classpath:site/properties/default/placeholder.properties 
       </value> 
       <value>classpath:site/properties/${env.name}/placeholder.properties 
       </value> 
      </list> 
     </property> 
    </bean> 
+0

+1 - Bunu yaptım. İyi çalışıyor. –

İlgili konular