स्प्रिंग कॉन्फ़िगरेशन फ़ाइल कहाँ रखें?


18

मैं अपनी परियोजना में विशेष रूप से सर्वर साइड में स्प्रिंग फ्रेमवर्क को एकीकृत करना चाहता हूं।

इसलिए, मैं इसे युद्ध फाइल के WEB-INF फ़ोल्डर के भीतर नहीं रखना चाहता।

क्या मुझे प्रत्येक परत में एक applicationContext.xml डालना चाहिए (प्रत्येक प्रोजेक्ट का मतलब अलग-अलग परियोजनाओं में विभाजित होने के बाद? (सेवा, डोमेन और DAO)

अच्छा अभ्यास क्या है?


2
यह प्रासंगिक हो सकता है: stackoverflow.com/questions/5967405/…
NoChance

जवाबों:


25

Maven फ़ाइल संरचना इस के साथ मदद मिल सकती है

संक्षेप में स्प्रिंग कॉन्फ़िगरेशन फ़ाइलें (जो किसी भी नाम से हो सकती हैं, न कि केवल सामान्य applicationContext.xml) को क्लासपाथ संसाधनों के रूप में माना जाता है और इसके तहत दायर किया जाता है src/main/resources। निर्माण प्रक्रिया के दौरान, इन्हें फिर WEB-INF/classesनिर्देशिका में कॉपी किया जाता है जो इन फ़ाइलों के समाप्त होने की सामान्य जगह है।

भिन्नताओं में एक अतिरिक्त springनिर्देशिका शामिल है (जैसे src/main/resources/spring) स्प्रिंग संदर्भों को अन्य अनुप्रयोगों के लिए समर्पित अन्य संसाधनों से अलग करने के लिए। आप अनुप्रयोग संदर्भों को समर्पित परतों में विभाजित करना चाह सकते हैं जैसे:

example-servlet.xml
example-data.xml
example-security.xml

और इसी तरह।

देव / परीक्षण / उत्पादन जैसे विभिन्न वातावरण के बारे में क्या?

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

एकीकरण परीक्षण के मामले में आपको "परीक्षण-केवल" स्प्रिंग कॉन्फ़िगरेशन फ़ाइल का उपयोग करने की आवश्यकता हो सकती है। इसमें विशेष संदर्भ शामिल होंगे जो परीक्षण सेम या कॉन्फ़िगरेशन का उपयोग करते हैं। ये src / परीक्षण / संसाधनों के तहत मौजूद होंगे और test-यह सुनिश्चित करने के लिए एक उपसर्ग हो सकते हैं कि डेवलपर्स अपने उद्देश्य से अवगत हों। एक विशिष्ट उपयोग एक गैर-जेएनडीआई डेटा स्रोत प्रदान करने के लिए होगा जो संभवतः बिल्ड स्वचालित परीक्षणों के दौरान एचएसक्यूएलडीबी डेटाबेस को लक्षित करता है और परीक्षण मामले के भीतर संदर्भित किया जाएगा।

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


2

क्या आपकी परियोजना मावेन मॉड्यूल में विभाजित है? यदि ऐसा है, तो आप केवल कॉन्फ़िगर फ़ाइलों के लिए एक अतिरिक्त मॉड्यूल जोड़ सकते हैं। इसे कॉन्फिग-मॉड्यूल कहते हैं

config-module
      |
      |--> src\main\resources\config\spring\applicationContex.xml
      |--> src\main\resources\config\properties\application.properties
      |--> pom.xml

ऐसा विन्यास एक सुझाव है। अपनी खुद की फ़ाइल सेट अप करें इसे JAR की तरह पैकेज करें और इस मॉड्यूल को किसी अन्य मॉड्यूल (वेब, ईयर लिबास, एक और जार) की निर्भरता के रूप में जोड़ें।

आपके पास कॉन्फ़िगर-मॉड्यूल संसाधनों (xml, गुण आदि) तक पहुंच होगी , क्योंकि वे क्लासपैथ में हैं।

वेब-मॉड्यूल का पोम

<dependency>
    <groupId>com.myproject.group</groupId>
    <artifactId>config-module</artifactId>
</dependency>

फिर बाहरी स्प्रिंग संदर्भ फ़ाइलों से आयात विवरण का उपयोग करें। उदाहरण के लिए

<import resource="classpath*:com/package/subpackage/**/config/applicationContext.xml" />

यह एक महान विचार था! मैंने थोड़ा अतिरिक्त जोड़ने की स्वतंत्रता ली क्योंकि आपका उदाहरण "आयात संसाधन" मेरे लिए काम नहीं कर रहा था ...... मैं अभी भी आयात विवरण ("पूर्ण पैकेज नाम पर आधारित)" फ़िल्टरिंग "सीख रहा हूं ... और मैंने इस महान विचार और उत्तर से ध्यान हटाने के लिए उस हिचकी (भविष्य के पाठकों के लिए) काम नहीं किया। धन्यवाद Laiv!
ग्रेनडाकोड

एक कारण यह है कि आपके "मुझे क्या काम करना चाहिए" आयात इस बग के कारण विफल हो सकता है: github.com/spring-projects/spring-framework/issues/16017
granadaCoder
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.