2010-10-12 17 views
5

हमारे पास एक ऐसा एप्लिकेशन है जिसे प्रत्येक के लिए थोड़ा अलग कॉन्फ़िगरेशन के साथ 120 बार तैनात किया गया है। हम लेखा परीक्षा और प्रबंधन उद्देश्यों के लिए डेटाबेस में कॉन्फ़िगरेशन को संग्रहीत करना चाहते हैं।डेटाबेस से स्प्रिंग कॉन्फ़िगरेशन

आप एक्सएमएल का उपयोग किए बिना सीधे स्प्रिंग बीन्स को डेटाबेस से कैसे चालू कर सकते हैं?

धन्यवाद

+0

क्या आप डेटाबेस में डेटाबेस से कनेक्ट करने के लिए बीन कॉन्फ़िगरेशन रखना चाहते हैं ...? –

उत्तर

10

आप शून्य एक्सएमएल config नहीं हो सकता है (जब तक आप JavaConfig है, जो चीजों को अपने मामले में अलग नहीं है का उपयोग करें)। आप इसे डेटाबेस में कुछ बाहरी कर सकते हैं, और एक कस्टम PropertyPlaceholderConfigurer का उपयोग कर सकते हैं। इसे प्राप्त करने के तरीके पर this article देखें।

+0

ठीक है, यदि आप नई '@ कॉन्फ़िगरेशन' /' @ बीन' शैली का उपयोग करते हैं, तो * आपके पास शून्य एक्सएमएल कॉन्फ़िगरेशन हो सकता है। – skaffman

+0

@skaffman हाँ, सच है। – Bozho

2

@ बोझो का सुझाव लगभग निश्चित रूप से सबसे व्यावहारिक समाधान है, खासकर यदि तैनाती के बीच अंतर न्यूनतम है और सरल स्केलर गुणों के माध्यम से व्यक्त किया जा सकता है।

विकल्प अपना खुद का BeanFactory कार्यान्वयन लिखना है। यह एक गैर-तुच्छ अभ्यास है, और आप यह सुनिश्चित करना चाहते हैं कि आपको इसकी आवश्यकता है। एक अच्छा प्रारंभिक बिंदु XmlBeanFactory के स्रोत को देखना होगा, और फिर अपना स्वयं का (DatabaseBeanFactory, शायद) लिखना होगा जो कुछ समान करता है, लेकिन स्थानीय एक्सएमएल फाइलों के बजाय डेटाबेस से बीन परिभाषाएं लाता है।

हालांकि, यह काफी अतिरिक्त काम होने जा रहा है।

1

कुछ विकल्प जो skaffman के सुझाव से सरल कर रहे हैं के होते हैं:

  • आपके विन्यास एक्सएमएल रूप में डेटाबेस में संग्रहीत किया जाता है, तो आप AbstractApplicationContext.getResource() अधिभावी द्वारा रणनीति को लाते समय एक कस्टम संसाधन लागू कर सकते हैं, तो आप कर सकते हैं कि डेटाबेस से एक्सएमएल विन्यास लोड करें। कुछ नमूना कोड के लिए here देखें। इस दृष्टिकोण का उपयोग करके आप फ्लाई पर एक्सएमएल कॉन्फ़िगरेशन भी उत्पन्न कर सकते हैं।

  • आपके विन्यास "disassembled" के रूप में संग्रहीत किया जाता है, तो आप BeanDefinition रों का निर्माण और संदर्भ निम्नलिखित तरीकों में से एक का उपयोग करने का आरंभीकरण के दौरान BeanDefinitionRegistry में जोड़ सकते हैं:

    • लागू एक namespace extension
    • लागू एक BeanFactoryPostProcessor
    • वसंत 3.0.1 के बाद से पिछले दृष्टिकोण विस्मयबोधक द्वारा सुधारा गया (आप BeanDefinitionRegistry को ConfigurableListableBeanFactory खिन्न करने के लिए है, जो आवेदन संदर्भों की अधिकांश प्रकार के लिए काम की आवश्यकता होगी) BeanDefinitionRegistryPostProcessor
2

की oduction वेब अनुप्रयोग के मामले में:

लिखें कस्टम ServletContextListener कार्यान्वयन कि गुण आवेदन स्टार्टअप पर डेटाबेस मूल्यों के साथ उदाहरण भरता है और वसंत के PropertyPlaceholderConfigurer को पास कर देता। पूर्ण कार्य उदाहरण के लिए यह पोस्ट देखें: http://blog.javaforge.net/post/31720600427/configuring-spring-based-web-application-from-database

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