2011-06-28 15 views
16

मुझे अपने स्कैला एप्लिकेशन को कॉन्फ़िगर करने के लिए एक तरीका चाहिए। कॉन्फ़ला को स्कैला में जाने का तरीका लग रहा था लेकिन इसे https://github.com/robey/configgy#readme से हटा दिया गया है और अब यह कार्यक्षमता शुतुरमुर्ग में है।ओस्ट्रिक कॉन्फ़िगरेशन के लिए कैसे उपयोग किया जाता है?

क्या कॉन्फ़िगरेशन के लिए केवल शुतुरमुर्ग का उपयोग करने के तरीके पर एक कोड उदाहरण है? मुझे आंकड़े एकत्र करने में कोई दिलचस्पी नहीं है।

+4

मैं 'Configgy' के लिए एक स्थानापन्न लिखा था। यह अधिकांश विरासत कॉन्फ़िगरेशन फ़ाइलों, अक्का कॉन्फ़िगरेशन फ़ाइलों और जावा गुणों के साथ संगत है। यह https://github.com/paradigmatic/Configrity – paradigmatic

उत्तर

14

मैं भी आधिकारिक उत्तर जानना चाहता हूं, लेकिन किसी ने जवाब नहीं दिया इसलिए मैंने चारों ओर पोक करने का फैसला किया। क्षमा करें अगर यह उत्तर काफी व्यापक नहीं है।

मुझे मिला सबसे अच्छा उदाहरण com.twitter.ostrich.admin.RuntimeEnvironment में था, खासकर यदि आप मुख्य रूप से loadConfig पर देखते हैं।

कहें कि आप कक्षा T के एक उदाहरण को कॉन्फ़िगर करना चाहते हैं। मूल विचार इस प्रकार है:

  • एक java.io.File कि स्काला स्रोत कोड है कि एक com.twitter.util.Config[T] का मूल्यांकन शामिल हो जाओ।
  • मान्य Config[T] होने के लिए आपको def apply(): T विधि की आवश्यकता होगी। कॉन्फ़िगरेशन फ़ाइल से कार्यान्वयन विवरण को रखने के लिए, आप अपनी प्रोजेक्ट में एक कक्षा को परिभाषित करना चाहेंगे जो Config[T] तक फैली हुई है। आप डिफ़ॉल्ट/आवश्यक फ़ील्ड को परिभाषित करने के लिए इस कक्षा का भी उपयोग कर सकते हैं।
  • com.twitter.util.Eval इंस्टेंस को इंस्टेंट करें, और Config[T] उदाहरण प्राप्त करने के लिए apply(file) पर कॉल करें।
  • दुर्भावनापूर्ण कॉन्फ़िगरेशन फ़ाइलों के लिए उचित अपवाद फेंकने के लिए config.validate() पर कॉल करें।
  • पर कॉल करें T का अपना पूर्ण रूप से कॉन्फ़िगर किया गया उदाहरण प्राप्त करने के लिए। यहाँ

    class WidgetService(val port: Int) 
    
    class WidgetConfig extends com.twitter.util.Config[WidgetService] { 
        var port = required[Int] 
        def apply(): WidgetService = { 
        new WidgetService(port) 
        } 
    } 
    
    object MyApp extends App { 
        val configFile = new java.io.File("mywidget_config.scala") 
        val eval = new com.twitter.util.Eval 
        val config = eval[com.twitter.util.Config[WidgetService]](configFile) 
        config.validate() 
        val widgetService = config() 
        println(widgetService.port) 
    } 
    

    और mywidget_config.scala है:

यहाँ एक सरल उदाहरण है, जहां मैं एक नया WidgetService कॉन्फ़िगर

new WidgetConfig { 
    port = 8000 
} 

नोट: यदि आप यदि आप इस डाल संशोधन करने के लिए हो सकता है एक पैकेज में मैंने ब्रेवटी के लिए डिफ़ॉल्ट पैकेज में सबकुछ किया।

निर्भरता काम करने के लिए प्राप्त करने के लिए, मैं अपने एसबीटी config को यह कहा:

libraryDependencies += "com.twitter" % "util" % "1.10.1" 
+3

पर उपलब्ध है बहुत जटिल –

+0

क्या स्केल फ़ाइल पर मूल्यों को वापस लिखना संभव है? क्योंकि अगर यह आसानी से पुराना नहीं है, तो मैं पुरानी अच्छी पसंद करूंगा। प्रॉपर्टीज फाइलें – Matroska

+0

मैट्रोस्का: स्केल फ़ाइल में मूल्यों को वापस लिखने के लिए कोई अंतर्निहित समर्थन नहीं है, लेकिन सामान्य केस के लिए ऐसा करने के लिए कोड लिखना संभव है (समान कॉन्फ़िगर में अनुपलब्ध वैल्यू विधि कैसे फ़ील्ड आत्मनिरीक्षण कर सकते हैं)। हालांकि, अगर आप अपनी कॉन्फ़िगरेशन में मुश्किल चीजें करते हैं तो आप उस जानकारी को खो सकते हैं (आप 'पोर्ट = 1024 + 1' में पढ़ेंगे लेकिन आप' पोर्ट = 1025' 'वापस लिखेंगे। – Mike

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