2012-05-10 16 views
15

पर फ़ाइल के लिए संपत्ति-प्लेसहोल्डर का उपयोग कैसे करें हम classpath पर एक फ़ाइल से गुण लोड करने के लिए एक तरह से किया करते थे:फाइल सिस्टम

<context:property-placeholder location="classpath:myConfigFile.properties" /> 

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

<context:property-placeholder location="${my.prop.file}" /> 

मैं भी इसे इस तरह की कोशिश की है, लुसियानो से एक विचार करने के लिए धन्यवाद: स्प्रिंग एक्सएमएल में

System.setProperty("my.prop.file", "/path/to/myConfigFile.properties"); 

:

जावा में: मैं नीचे एक सरल उदाहरण दे देंगे:

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="${my.prop.file}" /> 
</bean> 

सब कुछ मैं कोशिश की है नाकाम रही है। इससे कोई फर्क नहीं पड़ता कि मैंने my.prop.file को क्या सेट किया है। सबसे बड़ी हिट में शामिल हैं:

<context:property-placeholder location="/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: .path.to.myConfigFile.properties) 

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:.path.to.myConfigFile.properties) 

<context:property-placeholder location="file:///path/to/myConfigFile.properties" /> 
(ClassNotFoundException: file:...path.to.myConfigFile.properties) 

कैसे आप किसी स्थान फाइल सिस्टम पर और classpath पर नहीं है कि के साथ संपत्ति-प्लेसहोल्डर प्रयोग करते हैं? हम वसंत 3.0.5 का उपयोग कर रहे हैं।

यह पता चला कि स्क्रिप्ट फ़ाइल लोड करने वाली जावा प्रोग्राम चलाने वाली स्क्रिप्ट के साथ कोई समस्या थी। मदद के लिए शुक्रिया। मैं अनुरोध करने जा रहा हूं कि यह प्रश्न हटा दिया जाएगा, क्योंकि मूल कोड सभी के बाद काम करता है। आपकी मदद के लिए धन्यवाद।

+13

BTW जोरदार w/इस बंद किया जा रहा असहमत –

+1

बंद होने से असहमत भी। मैं कुछ googling के बाद यहाँ आया था और यह मेरे पास सही सवाल है ... –

+1

मुझे भी - मुझे समझ में नहीं आता कि यह "बहुत स्थानीयकृत" श्रेणी के साथ क्यों बंद था? यह काफी सामान्य लगता है मेरे लिए? – monojohnny

उत्तर

4

इस तरह से क्या?

<context:property-placeholder properties-ref="prop" /> 

<util:properties id="prop" location="reso"/> 

<bean id="reso" class="org.springframework.core.io.FileSystemResource"> 
    <constructor-arg index="0" value="/yourpathandfile" /> 
</bean> 
+0

क्या मैं इसे डाल सकता हूं मूल्य = "/ yourpathandfile" के लिए जावा पर्यावरण चर? मैं इसे एक शॉट दूंगा। धन्यवाद –

+0

यह काम नहीं प्रतीत होता है। संपत्ति पारित हो रही है, लेकिन वही त्रुटियां होती हैं। हालांकि, आपकी मदद के लिए धन्यवाद। यह संभव नहीं है? –

+0

क्या होगा यदि आप वास्तविक पथ के साथ $ {my.prop.file} को हार्डकोड करते हैं तो यह देखने के लिए कि क्या यह काम करता है? – Luciano

14

यह मेरे लिए काम किया:

<context:property-placeholder location="file:/path/to/myConfigFile.properties" /> 

लेकिन इस (दिलचस्प है) नहीं था:

<context:property-placeholder location="#{ systemProperties['foo'] }" /> 

मैं

java.io.FileNotFoundException: Could not open ServletContext resource [/#{ systemProperties['foo'] }] 

आप के लिए नहीं जा रहे हैं मिल गया वें के साथ एक संपत्ति प्लेसहोल्डर ${..} का उपयोग करने में सक्षम हो एक संपत्ति प्लेसधारक कॉन्फ़िगरर की ई परिभाषा। अंडे से पहले यह चिकन है।

तुम हमेशा PropertyPlaceholderConfigurer उपवर्ग सकते हैं और यह जो कुछ भी आप उदाहरण के लिए चाहते हैं (करते हैं, एक @PostConstruct विधि में setLocations() फोन फिर, बजाय, उपयोग <context:property-placeholder> का उपयोग करने का:।

<bean class="com.foo.MyPropertyPlaceholderConfigurer"/> 
+0

मैंने सोचा कि अभिव्यक्ति भाषा उस के लिए अनुमति दी गई है, जैसा कि [इस लेख में वसंत के साथ संपत्ति फ़ाइलों के प्रबंधन के बारे में तर्क दिया गया है] (http: //www.summa -tech.com/blog/2009/04/20/6-tips-for-managing-property-files-with-spring/)। मैं यह समझने की कोशिश करूंगा कि PropertyPlaceholderConfigurer में उप-वर्गीकृत करने की क्या आवश्यकता है ताकि यह पता लगा सके कि संपत्ति फ़ाइल को गतिशील रूप से कैसे लोड किया जाए। यह इतना आसान विचार प्रतीत होता था और अब वसंत के साथ इतनी गड़बड़ हो रही है। –

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