2015-12-17 8 views
7

शीर्षक स्वयं ही वार्तालाप करता है, मेरे पास एक कॉन्फ़िगर ऑब्जेक्ट है (https://github.com/typesafehub/config से) और मैं इसे एक कन्स्ट्रक्टर पास करना चाहता हूं जो केवल java.util.Properties को तर्क के रूप में समर्थन देता है। क्या एक कॉन्फ़िगरेशन ऑब्जेक्ट में कॉन्फ़िगर करने का कोई आसान तरीका है?कनवर्टिंग टाइपएफ़ कॉन्फ़िगर प्रकार java.util.Properties

उत्तर

1

typesafe config/hoconjava.util.propeties से अधिक समृद्ध संरचना का समर्थन करता है, तो इसे सुरक्षित रूपांतरण प्राप्त करना मुश्किल होगा।

या अन्यथा properties के रूप में बोली जाने वाली बात केवल hocon का उप-समूह व्यक्त कर सकती है, रूपांतरण स्पष्ट नहीं है, क्योंकि इसमें संभावित जानकारी हानि होगी।

तो यदि आप कॉन्फ़िगरेशन अपेक्षाकृत फ्लैट हैं और इसमें utf-8 नहीं है तो आप hocon से json को बदल सकते हैं और फिर मान निकाल सकते हैं।

एक बेहतर समाधान ConfigClass को लागू करना होगा और मूल्यों को हुकॉन से मूल्यों के साथ पॉप्युलेट करना होगा और इसे उस कक्षा में पास करना होगा जिसे आप कॉन्फ़िगर करना चाहते हैं।

+2

हां, मुझे इस डेटा मॉडल मेल के बारे में पता है। मैं उम्मीद कर रहा था कि कॉन्फ़िगर या ConfigObject में एक प्रकार की "flatten" विधि हो सकती है। असल में, मैं अपने कॉन्फ़िगर ऑब्जेक्ट से एक कफका उपभोक्ता को कॉन्फ़िगर करना चाहता हूं, और कफका उपभोक्ता गुणों को तर्क के रूप में लेता है; तो मुझे कम या ज्यादा यकीन है कि उपभोक्ता को जाने वाली मेरी कॉन्फ़िगरेशन का हिस्सा घोंसला नहीं होगा। –

5

यहाँ एक तरह से एक गुण जावा वस्तु में एक typesafe कॉन्फ़िग वस्तु कन्वर्ट करने के लिए है। मैंने केवल कफका गुण बनाने के लिए इसे एक साधारण मामले में परीक्षण किया है।

application.conf में इस विन्यास को देखते हुए

kafka-topics { 
    my-topic { 
    zookeeper.connect = "localhost:2181", 
    group.id = "testgroup", 
    zookeeper.session.timeout.ms = "500", 
    zookeeper.sync.time.ms = "250", 
    auto.commit.interval.ms = "1000" 
    } 
} 

आप इसी गुण उद्देश्य यह है कि प्रकार बना सकते हैं

import com.typesafe.config.{Config, ConfigFactory} 
import java.util.Properties 
import kafka.consumer.ConsumerConfig 

object Application extends App { 

    def propsFromConfig(config: Config): Properties = { 
    import scala.collection.JavaConversions._ 

    val props = new Properties() 

    val map: Map[String, Object] = config.entrySet().map({ entry => 
     entry.getKey -> entry.getValue.unwrapped() 
    })(collection.breakOut) 

    props.putAll(map) 
    props 
    } 

    val config = ConfigFactory.load() 

    val consumerConfig = { 
    val topicConfig = config.getConfig("kafka-topics.my-topic") 
    val props = propsFromConfig(topicConfig) 
    new ConsumerConfig(props) 
    } 

    // ...  
} 

समारोह propsFromConfig क्या आप मुख्य रूप से रुचि रखते हैं है में, और मुख्य बिंदु एंट्रीसेट का उपयोग करने के लिए हैं और गुणों की एक flatten सूची, और प्रवेश मूल्य के unrapped, जो एक वस्तु देता है जो प्रकार विन्यास मूल्य पर निर्भर करता है।

3

आप मेरे स्कैला रैपर https://github.com/andr83/scalaconfig को आजमा सकते हैं। इसका उपयोग कॉन्फ़िगरेशन ऑब्जेक्ट को जावा गुणों में कनवर्ट करना सरल है:

val properties = config.as[Properties] 
+2

यह कॉन्फ़िगर इम्हो का हिस्सा होना चाहिए –

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