2016-03-28 6 views
8

के साथ उपयोग के लिए मैं एक या अधिक कस्टम प्रॉपर्टी स्रोत लोडर बनाने और उन संपत्ति स्रोतों का उपयोग करके अपने आवेदन में @ConfigurationProperties के साथ उपयोग करने में रूचि रखता हूं।कस्टम एक्सएमएल-आधारित प्रॉपर्टी सोर्स लोडर @ कॉन्फिगरेशनप्रॉपर्टीज

उदाहरण के लिए, मैं एक XML स्रोत लोड करने में सक्षम एक प्रॉपर्टी स्रोत लोडर विकसित करना चाहता हूं और इसे गुणों के एक समूह में परिवर्तित करना चाहता हूं जिसे मेरे @Configuration एनोटेटेड कक्षाओं में इंजेक्शन दिया जा सकता है।

@Configuration 
@ConfigurationProperties(locations="classpath:config.xml") 
public class MyConfig 
{ 
    ... 
} 

क्या ऐसा कोई XML- आधारित प्रॉपर्टी स्रोत लोडर सार्वजनिक रूप से उपलब्ध है? यदि नहीं, तो मैं इसे लागू करने के बाद इसे अपने आवेदन में उपलब्ध कराने के बारे में कैसे जाउंगा?

धन्यवाद।

+0

सैद्धांतिक रूप से बॉक्स से बाहर काम करना चाहिए, क्योंकि गुण फ़ाइल को एक्सएमएल के साथ-साथ सादे गुण प्रारूप में व्यक्त किया जा सकता है। यदि आप कुछ कस्टम प्रारूप चाहते हैं तो आपको अपनी फ़ाइल को प्री-लोड करने के लिए अपना 'PropertySourceLoader' या' ApplicationContextInitializer' लिखना होगा। –

उत्तर

3

आप YamlPropertySourceLoader को कैसे कार्यान्वित कर सकते हैं इसे देख सकते हैं। एक बार जब आप यह तरीका लागू

org.springframework.boot.env.YamlPropertySourceLoader#getFileExtensions 

एक बार आप इस

@ConfigurationProperties(locations="classpath:config.xml") 

की तरह कुछ जोड़ने लेकिन YamlPropertySourceLoader की देख कार्यान्वयन ऐसा लगता है कि आप बहुत सारा काम करना होगा, आदि कतरन के साथ बुलाया जाएगा

क्योंकि यह आपको संरचित गुण बनाने के लिए संभावना प्रदान करता है, तो YAML आप के लिए पर्याप्त होगा आप की जाँच करनी चाहिए:

उदाहरण के लिए टी, वह निम्नलिखित YAML दस्तावेज़: इस YAML उदाहरण के लिए

environments.dev.url=http://dev.bar.com 
environments.dev.name=Developer Setup 
environments.prod.url=http://foo.bar.com 
environments.prod.name=My Cool App 

YAML सूचियां [सूचकांक] dereferencers साथ संपत्ति कुंजी के रूप में प्रतिनिधित्व कर रहे हैं,:

my: 
    servers: 
     - dev.bar.com 
     - foo.bar.com 

environments: 
    dev: 
     url: http://dev.bar.com 
     name: Developer Setup 
    prod: 
     url: http://foo.bar.com 
     name: My Cool App 

इन गुणों में तब्दील किया जा चाहेंगे

इन गुणों में परिवर्तित हो जाएगा:

my.servers[0]=dev.bar.com 
my.servers[1]=foo.bar.com 

भले ही आपके पास एक्सएमएल दस्तावेज़ तैयार हों और यही वजह है कि आप उन्हें कॉन्फ़िगरेशन में लोड करना चाहते हैं, यह एक्सएमएल (https://github.com/FasterXML/jackson-dataformat-xml) में एक्सएमएल को कनवर्ट करने के लिए और अपने खुद के प्रॉपर्टीसोर्सलोडर को लिखने के बजाय मौजूदा यमप्रप्रतिसोर्सलोडर का उपयोग करने के लिए और अधिक आसान लग रहा है।

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