2009-09-21 12 views
6

मैं अपने जावा वेब एप्लिकेशन के बाहर अपने वसंत xml कॉन्फ़िगरेशन को कैसे स्थानांतरित करूं?मैं अपने वेब एप्लिकेशन के बाहर अपने वसंत xml कॉन्फ़िगरेशन को कैसे स्थानांतरित करूं?

मैं अपने वेब एप्लिकेशन के बाहर अपने spring.xml को स्टोर करना चाहता हूं इसलिए मुझे कॉन्फ़िगरेशन बदलने के लिए मेरे एप्लिकेशन का नया निर्माण नहीं करना है।

ऐसा करने का सबसे अच्छा तरीका क्या है?

+0

आप इसे कहां स्टोर करना चाहते हैं, आदर्श रूप से? – skaffman

+0

आदर्श रूप से हम अपने स्थान का निर्धारण करने के लिए टोमकैट को पारित एक चर का उपयोग करेंगे। हालांकि एक हार्ड कोडित पथ एक स्वीकार्य विकल्प है। – ScArcher2

उत्तर

7

के रूप में रॉड जॉनसन this thread में यह बताते हैं:

आप सामान्य स्प्रिंग श्रोता या स्टार्टअप सर्वलेट साथ, classpath से लोड करने के लिए classpath: उपसर्ग का उपयोग कर सकते हैं। यह वसंत के संसाधन अमूर्तता द्वारा संभव बनाया गया है। आप WEB-INF और क्लासपाथ से संसाधनों को स्वतंत्र रूप से मिश्रण और मिलान कर सकते हैं।

तो, विन्यास फाइल कहीं classpath में webapp के बाहर रख दिया और घोषित web.xml में निम्नलिखित:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:springContext*.xml</param-value> 
</context-param> 

मुझे लगता है कि classpath पर निर्भर एक पूर्ण फ़ाइल पथ का उपयोग कर अधिक से अधिक पोर्टेबल है ।

+1

यह निश्चित रूप से स्टैंडअलोन ऐप के लिए एक अच्छा दृष्टिकोण होगा। वेबपैप के लिए, हालांकि, क्लासपाथ में कुछ करने के लिए, लेकिन वेबपैप फ़ोल्डर के बाहर आपको अपना संदर्भ पूरे सर्वर पर उपलब्ध करना होगा जो आदर्श नहीं हो सकता है (जब तक कि प्रश्न में ऐप केवल एक ही नहीं है)। – ChssPly76

+0

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

2

आप (webapp संरचना के बाहर) कुछ फ़ोल्डर में स्थानांतरित कर सकते हैं और स्पष्ट रूप में उस फ़ोल्डर में संदर्भ के लिए बात करने के लिए संदर्भ स्थान निर्दिष्ट अपने web.xml:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>file:/full/path/to/context.xml</param-value> 
</context-param> 

जिसके अनुसार, सबसे अच्छा तरीके से करना यह ऐसा नहीं हो सकता है :-) और इसके बजाय पुनर्विचार करें कि आप अपने आवेदन को कैसे तैनात करते हैं (उदाहरण के लिए आप एक "पैच" या "अपग्रेड" तैनाती इकाई बना सकते हैं जिसमें परिवर्तनों को पूर्ण उड़ा हुआ युद्ध हो)। पूर्ण पथ निर्दिष्ट करना इसके लायक होने से अधिक परेशानी होती है।

0

जब आप तैनाती की समस्या है, तो आप इसके लिए क्यों जटिल बनाते हैं। अधिकांश कंटेनर WARs को "विस्फोटित" रूप में तैनात करते हैं, जिसका अर्थ है कि कहीं भी आपके सिस्टम सिस्टम spring.xml फ़ाइल है।

यदि आप इसे अपडेट करना चाहते हैं, तो आप बस वास्तविक स्थान का पता लगा सकते हैं और फिर अपने पुराने spring.xml को पुराने पर कॉपी कर सकते हैं। फिर भी, एक ही समय में, आपका युद्ध \ riguer "सत्य का स्रोत" बना हुआ है।

WARs उपयोग और तैनाती के लिए बहुत आसान होते हैं, इसलिए आपके कॉन्फ़िगरेशन को WAR में जितना संभव हो सके उतना ही बंडल करने का लाभ होता है।

तो, आप कंटेनर के पीछे पीछे जाकर वसंत.एक्सएमएल अपडेट कर सकते हैं, और इसे सीधे संपादित कर सकते हैं (या प्रतिलिपि बना सकते हैं)।

अंत में, आपके WAR के बाहर spring.xml होने का मतलब है कि यह आपके सभी WARs के लिए उपलब्ध है, और यदि आप बाद में अपने सिस्टम में एक और युद्ध जोड़ने का निर्णय लेते हैं, तो आपको दो फाइलों को अलग करने में कठिनाई होगी एक विशिष्ट युद्ध के लिए लंबे समय तक लंगर नहीं है।

+0

इस पर एक तैनाती मुद्दा होने पर सहमति हुई। आप सभी डब्ल्यूएआर के संदर्भ में संदर्भ के बारे में गलत हैं, हालांकि - यह क्यों होगा? – ChssPly76

+0

मुझे लगता है कि उनका मतलब है कि एक ही युद्ध की दो प्रतियां फाइल सिस्टम पर एक ही फाइल को संदर्भित करती हैं ... ऐसा करने के लिए एक अनिवार्य कारण नहीं लगती है, हालांकि – skaffman

+0

हम इसे तैनात करेंगे।विभिन्न विन्यास के साथ कई ग्राहकों के लिए युद्ध। यही कारण है कि हमें बाहरी कॉन्फ़िगरेशन फ़ाइल की आवश्यकता है। – ScArcher2

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