2011-03-31 9 views
14

मुझे जावा एप्लिकेशन के लिए कॉन्फ़िगरेशन पैरामीटर के अपेक्षाकृत जटिल सेट को संसाधित करने की आवश्यकता है। आवश्यकताओं मोटे तौर पर कर रहे हैं:जटिल कॉन्फ़िगरेशन को संभालने के लिए संभावित हल्के जावा कॉन्फ़िगरेशन लाइब्रेरी क्या हैं?

  • सूचियों, नक्शे, आदि के साथ नेस्टेड कॉन्फ़िगरेशन मान - न केवल सादा कुंजी/मान जोड़े
  • एकाधिक विन्यास फाइल जहां बाद में विन्यास फाइल समझदारी से पहले विन्यास फाइल से सेटिंग को ओवरराइड कर सकते हैं।
  • विभिन्न स्थानों से एक ही को कॉन्फ़िगर आइटम के लिए एकाधिक संदर्भ
  • इनहेरिट करने के लिए कॉन्फ़िगर वस्तुओं, इसलिए नए सिरे से वस्तु पिछले एक वस्तु से विन्यास कॉपी सिर्फ विशिष्ट बातें
  • बदल सकते हैं कर सकते हैं
  • बहुत कम कोड एक नया विन्यास विकल्प के लिए आवश्यक - इष्टतम केवल एक क्षेत्र में एक @ कॉन्फिगर करने योग्य एनोटेशन जोड़ने के लिए, या कुछ समान

अब, मुझे पता है कि वसंत इन सभी को एक निश्चित तरीके से पूरा करता है।

  • स्प्रिंग वास्तव में एक विन्यास भाषा के रूप में अनुकूल नहीं है, के रूप में यह निर्भरता इंजेक्शन
  • एक्सएमएल विन्यास फाइल अधिक अंदर भेज दिया के लिए होती हैं के बारे में कुछ और अधिक चिंतित है: हालांकि, यह कुछ नुकसान, हालांकि कोई भी घातक है एक जेएआर फ़ाइल और अंतिम उपयोगकर्ता द्वारा संशोधित नहीं, सभी कॉन्फ़िगर करने योग्य गुणों को एक अलग गुण फ़ाइल या इसी तरह के संदर्भ में संदर्भित किया जाता है - जहां मुझे कॉन्फ़िगरेशन फ़ाइल को पूर्ण और आसानी से अंत उपयोगकर्ता को संशोधित करने की आवश्यकता होती है
  • वसंत कॉन्फ़िगरेशन कुछ हद तक कठिन होता है चल रहे कनेक्शन को समाप्त किए बिना ऑनलाइन कॉन्फ़िगरेशन रीफ्रेश होते हैं और जब अलग कॉन्फ़िगरेशन चेकइन होने की आवश्यकता होती है जी पुरातन वास्तव में कुछ भी नहीं पूरी तरह से एक विन्यास को मान्य करने की जरूरत है, लेकिन

तो, मैं पूछ रहा हूँ, आप किसी भी विकल्प है कि मेरे आवश्यकताओं को पूरा करेगा के बारे में सोच सकते हैं?

मैं यमबिन की तरह हूं, लेकिन इसमें कुछ विशेषताओं की कमी है।

उत्तर

8

क्या आपके पास पहले से ही Apache Commons Configuration पर एक नज़र डाली है?

+0

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

+0

"यद्यपि" -> "सोचा" – Nakedible

+0

एक बार फिर प्रलेखन के माध्यम से पढ़ने के बाद: एक ही कॉन्फ़िगर किए गए ऑब्जेक्ट के लिए कोई संदर्भ नहीं और कोई विरासत कॉन्फ़िगरेशन नहीं है (इसे अपाचे कॉमन्स कॉन्फ़िगरेशन के शीर्ष पर स्वयं किए बिना)। – Nakedible

5

हम अपने प्रोजेक्ट पर Constretto का उपयोग करते हैं। बहुत हल्का और उपयोग करने में आसान है।

+0

अच्छा लगता है - सिवाय इसके कि सूचीबद्ध आवश्यकताओं को पूरा करने के लिए प्रतीत नहीं होता है, अर्थात् ऑब्जेक्ट संदर्भ और "विरासत"। – Nakedible

1

अधिकांश आवश्यकताओं के लिए, मैं इसे मानक गुणों के साथ पूरा करने में सक्षम हूं। मैं एक विन्यास वर्ग है कि गुण पढ़ा से फाइल में एक गुण वस्तु लिपटे:

  1. एक आम जार
  2. "आवेदन" जार/classpath
  3. फाइल सिस्टम (JVM करने के लिए एक-डी संपत्ति के रूप में निर्दिष्ट)

कॉन्फ़िगरेशन क्लास कोड ऐसा है कि एप्लिकेशन में गुण सामान्य में गुणों को ओवरराइट करते हैं और फाइल सिस्टम गुण अनुप्रयोग स्तर गुणों को ओवरराइट करते हैं।

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

कुछ इस तरह JSON या बजाय गुण फ़ाइलों का YAML फ़ाइल से निपटने के लिए अनुमति देने के नक्शे, सूची में विस्तृत होना चाहिए, आदि

+0

इसके अलावा, यहां वसंत कॉन्फ़िगरेशन फ़ाइलों में JSON गुणों को एकीकृत करने के लिए कुछ नमूना कोड दिया गया है: http://christopherhunt-software.blogspot.com/2010/04/spring-propertyeditor-for-json-map-and.html – AngerClown

+0

यह एक सुंदर है बुनियादी ढांचा। हालांकि, प्रश्न में मेरी आवश्यकताओं विशेष रूप से कई चीजों को सूचीबद्ध नहीं करती है जो इस द्वारा हासिल नहीं की जाती हैं। इस परियोजना की कॉन्फ़िगरेशन आवश्यकताएं वास्तव में इसकी आवश्यकता के लिए काफी जटिल हैं - वर्तमान कॉन्फ़िगरेशन 5000 से अधिक लाइनों से अधिक है। – Nakedible

9

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

http://owner.aeonbits.org

3

आप cfg4j आजमाइए सकता है। यह ज्यादातर वितरित ऐप्स की ओर उन्मुख है लेकिन अधिकांश अनुरोधित सुविधाओं का समर्थन करता है।

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