2010-08-31 21 views
10

से संबंधित पथ का उपयोग कर फ़ाइल मैं अपनी स्प्रिंग कॉन्फ़िगरेशन फ़ाइल के अंदर से अलग गुण फ़ाइल में गुणों को स्थानांतरित कर रहा हूं। यहसंदर्भ स्प्रिंग गुण फ़ाइल कॉन्फ़िगरेशन फ़ाइल

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer"> 
    <property name="location" value="file:properties/${CONFIG_MODE}/service.properties" /> 
</bean> 

साथ कॉन्फ़िग फ़ाइल में शामिल है यह खड़ा के रूप में, गुण फ़ाइल का स्थान सर्वर प्रक्रिया के वर्तमान कार्यशील निर्देशिका के सापेक्ष है।

यह आवश्यकता बनाता है कि प्रक्रिया एक विशिष्ट कार्य निर्देशिका से शुरू की जानी चाहिए, और इससे भी बदतर (स्वीकार्य रूप से दूरस्थ) संभावना है कि यह एक पूरी तरह से अलग गुण फ़ाइल ले सकता है - उदाहरण के लिए यदि यह शुरू किया गया था कार्यशील निर्देशिका सेवा के पुराने संस्करण पर सेट है।

मैं कॉन्फ़िगरेशन फ़ाइल वाली निर्देशिका के सापेक्ष पथ का उपयोग करके गुण फ़ाइल का संदर्भ देना चाहता हूं।

FileSystemResource पर देखकर, ऐसा लगता है कि createRelative मुझे जो चाहिए वह हो सकता है, लेकिन मैं यह नहीं समझ सकता कि कॉन्फ़िगरेशन फ़ाइल में इसका उपयोग कैसे किया जाए।

धन्यवाद,

स्टीव

उत्तर

10

मैं एक रास्ते से नहीं पता है कि क्या करना है।

आप क्या कर सकते हैं, हालांकि, लोड गुण classpath से फ़ाइल है:

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer"> 
    <property name="location" value="classpath:path/to/service.properties" /> 
</bean> 

अपने गुण फ़ाइल के classpath स्थान में कहीं अधिक उम्मीद के मुताबिक स्थिति है, और यह रूप में लंबे समय के रूप में काम करेंगे अपने क्लासपाथ ठीक से स्थापित है।

+0

अच्छा समाधान - धन्यवाद। एकमात्र समस्या (और मैं मानता हूं कि यह कोई गंभीर समस्या नहीं है) यह है कि कभी-कभी यह गुण फ़ाइल को सीधे देखने/संपादित करने में सक्षम होता है - उदाहरण के लिए आपात स्थिति में, या कुछ त्वरित परीक्षण करने के लिए। जार के अंदर होने से यह रोका नहीं जाता है, लेकिन यह थोड़ा बोझिल बनाता है। – stevec

+2

@stevec: इसे एक जार, फ़ाइल के अंदर नहीं होना चाहिए, यह क्लासपाथ पर मौजूद फाइल सिस्टम निर्देशिका के अंदर आसानी से हो सकता है। – skaffman

+0

एक बार जब मैं '@Value (" $ {thing.inside.service.properties} ") का उपयोग करता हूं तो यह काम करेगा? –

9

3.1 का उपयोग करके, यदि आप चाहें तो फाइल को क्लासपाथ से दूर रख सकते हैं।

निम्नलिखित सेम परिभाषा के साथ

,

<bean class= 
    "org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer"> 
    <property name="location" 
    value="file:${props.path}/service.properties" /> 
</bean> 

आप एक संपत्ति जावा कमांड लाइन

java ... -Dprops.path=path/to/where/it/is 
0

जाना चाहिए तुम्हें config.properties रखा है का उपयोग कर सेट कर सकते हैं वेब-INF फिर अंदर दाखिल:

<bean id="propertyConfigurerInternal" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<property name="location"> 
    <value>classpath:../config.properties</value> 
</property> 

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