2009-08-21 16 views
12

मुझे कुछ गुणों को एक ऐसे स्थान से वसंत संदर्भ में लोड करने की आवश्यकता है जिसे प्रोग्राम नहीं चलने तक मुझे नहीं पता।किसी अन्य संपत्ति से संपत्ति-प्लेसहोल्डर स्थान

तो मैंने सोचा कि अगर मैं कोई स्थान के साथ एक PropertyPlaceholderConfigurer था यह my.location प्रणाली गुणों से में पढ़ता था और उसके बाद मैं एक संदर्भ में उस स्थान का उपयोग कर सकता: संपत्ति-प्लेसहोल्डर

इस

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

लेकिन यह काम नहीं करता और न ही location="classpath:${my.location}"

करता पॉल

+0

आप इस तरह के दो प्लेसहोल्डर्स को गठबंधन करने में सक्षम नहीं होंगे - वे बीनफैक्टरीपोस्टप्रोसेसर हैं, जो एक दूसरे को संसाधित नहीं कर सकते हैं, अगर आप देखते हैं कि मेरा क्या मतलब है। – skaffman

+0

हां, मुझे लगा कि मेरी समस्या उन पंक्तियों के साथ कुछ थी –

+0

दरअसल, यह संपत्तिप्लेस होल्डर कॉन्फ़िगरर में वृद्धि की तरह गंध करता है जो स्प्रिंग जेरा में फीचर अनुरोध के रूप में दाखिल करने लायक हो सकता है। – skaffman

उत्तर

5

यहां समस्या यह है कि आप संपत्ति प्लेसहोल्डर सिंटैक्स का उपयोग करके एक प्रॉपर्टी प्लेस धारक को कॉन्फ़िगर करने का प्रयास कर रहे हैं :) यह चिकन-एंड-अंडे की स्थिति का थोड़ा सा है - वसंत आपके ${my.location} प्लेसहोल्डर को तब तक हल नहीं कर सकता जब तक कि यह संपत्ति-प्लेसहोल्डर कॉन्फ़िगर नहीं हो जाता।

यह संतोषजनक नहीं है, लेकिन आप अधिक स्पष्ट वाक्य रचना का उपयोग करके इसे bodge सकता है:

<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

संतोषजनक नहीं है, लेकिन कम से कम यह –

+0

काम कर सकता है स्प्रिंग 3.1.3: 'org.springframework.beans.NotWritablePropertyException: बीन क्लास की अवैध संपत्ति 'स्थान' [org.springframework.beans.factory.config .PropertyPlaceholderConfigurer]: बीन संपत्ति 'स्थान' लिखने योग्य नहीं है या एक अवैध सेटटर विधि है। क्या सेटटर का पैरामीटर प्रकार गेटटर के रिटर्न प्रकार से मेल खाता है? ' –

15

आप एक अलग दृष्टिकोण के साथ ऐसा कर सकते हैं। यहां बताया गया है कि हम इसे कैसे कॉन्फ़िगर करते हैं। मैं डिफ़ॉल्ट गुण लोड करता हूं और फिर कॉन्फ़िगर करने योग्य स्थान से गुणों के साथ उन्हें ओवरराइड करता हूं। यह मेरे लिए बहुत अच्छा काम करता है।

<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 - मैंने यह किया है। अच्छा काम करता है। –

संबंधित मुद्दे