मैं सोच रहा हूं कि समस्या को कैसे हल किया जाए: मेरे पास डॉकर पर एक स्प्रिंग-बूट ऐप है जो डीबी और किसी अन्य सेवा से जुड़ता है। शायद कुछ ग्राहकों के पास दूसरों की तुलना में अन्य यूआरएल पर डीबी होगा।

मैं डीबी से कनेक्ट करने के लिए spring.datasource.url संपत्ति का उपयोग करता हूं। क्या मुझे इसे तर्कों में जोड़ना चाहिए और इसका उपयोग करना चाहिए:

    Properties properties = new Properties();
    properties.put("spring.datasource.url", args[1]);
    application.setDefaultProperties(properties);

और ऐसा कुछ इसे ओवरराइड करेगा? लेकिन प्रत्येक रन में डीबी यूआरएल जोड़ने की आवश्यकता होगी। या कुछ और इस्तेमाल करें?

1
Piotr 11 सितंबर 2018, 14:30

2 जवाब

आपके द्वारा यहां प्रदान की गई जानकारी के अनुसार, डेटाबेस लिंक आपके एप्लिकेशन का कॉन्फ़िगरेशन होना चाहिए। मूल रूप से आपके पास एक कॉन्फ़िगरेशन फ़ाइल होनी चाहिए

आवेदन.गुण

और जब आप यूआरएल बदलना चाहते हैं, तो बस इसे कॉन्फ़िगरेशन फ़ाइल में बदलें और निर्माण करें।

आप दस्तावेज़ यहां पा सकते हैं

और इसके अलावा यदि आप कुबेरनेट्स जैसे देवोप्स वातावरण का उपयोग कर रहे हैं, तो आपके पास एक कॉन्फिग-मैप होना चाहिए और आपके डिप्लॉयमेंट को उन कॉन्फिग-मैप्स से कॉन्फिगरेशन मिलेगा जो application.properties फाइलों की तरह हैं।

0
Damith 11 सितंबर 2018, 14:39

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

छँटाई बूट में विन्यास को बाहरी करने के लिए सुविधाएँ हैं (https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html)। आपके मामले के लिए सबसे आसान पर्यावरण चर का उपयोग करना होगा जो नामों के आराम से बाध्यकारी द्वारा गुणों को ओवरराइड करते हैं (https://github.com/spring-projects/spring-boot/wiki/Relaxed-Binding-2.0)। यदि ऐप को SPRING_DATASOURCE_URL नामक एक पर्यावरण चर के साथ शुरू किया गया है, तो यह मान आपके गुणों में स्प्रिंग.डेटासोर्स.यूआरएल के लिए जो कुछ है उसे ओवरराइड कर देगा। आपकी गुण फ़ाइल प्रभावी रूप से एक डिफ़ॉल्ट मान सेट करती है जिसे आप ओवरराइड कर सकते हैं। यह स्प्रिंग बूट के लिए बॉक्स व्यवहार से बाहर है और अन्य गुणों पर भी लागू होता है (सभी डीबी वाले सहित, हालांकि यदि आपके पास विभिन्न प्रकार के डेटाबेस हैं तो आप अपने निर्माण में सभी प्रासंगिक ड्राइवर जार शामिल करना चाहेंगे)।

चूंकि आप डॉकर का उपयोग कर रहे हैं, इसलिए आप -e पैरामीटर का उपयोग करके तैनाती/स्टार्टअप समय पर कंटेनर में पर्यावरण चर सेट कर सकते हैं। तो आप प्रत्येक परिनियोजित उदाहरण के लिए परिनियोजन समय पर ओवरराइड कर सकते हैं।

आप docker-compose या Kubernetes जैसे docker के शीर्ष पर और परतों का उपयोग कर सकते हैं। फिर आप परिनियोजन वर्णनकर्ता फ़ाइलों में पर्यावरण चर सेट करने में शामिल हो सकते हैं जो आपके परिनियोजन कॉन्फ़िगरेशन का वर्णन करते हैं। लेकिन वह कॉन्फ़िगरेशन प्रबंधन प्रश्न एक अलग परत/चरण पर है और आपके द्वारा अपने कॉन्फिगर को बाहरी बनाने के बाद बिल्ड चरण का हिस्सा नहीं है।

0
Ryan Dawson 15 सितंबर 2018, 13:31