2014-10-30 4 views
11

के साथ लॉन्च स्प्रिंग-बूट (प्रोफ़ाइल-विशिष्ट) एप्लिकेशन में अनुप्रयोग गुणों को ओवरराइड करना जारी करना मुझे क्लासपाथ पर प्रोफ़ाइल-विशिष्ट अनुप्रयोग गुण फ़ाइल में घोषित संपत्ति को ओवरराइड करने का प्रयास करने में कठिनाई हो रही है जिसमें किसी अन्य घोषित घोषित किया गया है फाइल सिस्टम पर फाइल ओवरराइड करता है।PropertiesLauncher - SOLVED

मैं (कि @EnableAutoconfiguration का उपयोग कर, है) एकाधिक प्रोफाइल, जो मैं PropertiesLauncher बल्कि JarLauncher से (तैनाती की कमी साथ क्या करने वाले कारण का उपयोग कर लॉन्च किया है कि एक ऑटो-विन्यस्त स्प्रिंग-बूट आवेदन है - क्या मैं एक विस्फोट को तैनात करने की जरूरत है । एक संग्रह निर्देशिका के बजाय एक में केवल पढ़ने के लिए फाइल सिस्टम)

अपने आवेदन की जड़ के भीतर, मैं उदाहरण के लिए, कुछ प्रोफ़ाइल विशिष्ट आवेदन गुण होते हैं:

application-dev.properties 
application-qa.properties 
application-prd.properties 

और मान लें, तर्क की खातिर कि application-dev.properties शामिल:

foo.bar=baz 
foo.baz=other 

किसी भी पर्यावरण के लिए, यह एक मौजूदा संपत्ति ओवरराइड करने के लिए, साथ ही आपूर्ति आवश्यक हो सकता है एक अनुपस्थित एक (एक उत्पादन पासवर्ड की तरह, उदाहरण के लिए) , और जो मुद्दा मैं देख रहा हूं वह क्लासपाथ पर application-${profile}.properties फ़ाइल में पहले से घोषित ओवरराइडिंग गुणों के साथ है। (आपूर्ति गुण classpath फ़ाइल में मौजूद नहीं ठीक है, इस मुद्दा नहीं है काम करता है।)

मैं एक ओवरराइड गुण जैसे एक फाइल सिस्टम स्थान में दायर करवाना कहते हैं:

/local/appname/dev/overrides/application.properties 

और मैं चाहता हूँ संपत्ति को ओवरराइड करने के लिए, foo.bar, साथ ही साथ एक नई संपत्ति घोषित करें, foo.password

इसलिए ओवरराइड फ़ाइल की सामग्री हैं:

java -Dspring.config.location=file:/local/appname/dev/overrides/ 
    -Dspring.profiles.active=dev 
    org.springframework.boot.loader.PropertiesLauncher 
    --debug & 

मुद्दा मैं देख रहा हूँ, हालांकि वह यह है कि:

foo.bar=overridden-value 
foo.password=something 

जब मैं आवेदन शुरू, मैं इस तरह एक कमांड लाइन कुछ का उपयोग foo.password, संपत्ति नहींapplication-dev.properties फ़ाइल है में घोषित bazapplication-dev.properties से नहीं बल्कि मूल्य से, overridden-value/local/appname/dev/overrides/application.properties से मैं अभी भी इसका महत्व समझते हैं, - उठाया, foo.bar की ओवरराइड नजरअंदाज कर दिया है।

--debug विकल्प सक्षम होने पर, मुझे लगता है कि आदेश में ConfigFileApplicationListener लॉगिंग है कि यह दोनों ओवरराइड फ़ाइल लोड हो जाए (फाइल सिस्टम से) और (classpath से) प्रोफ़ाइल विशिष्ट फ़ाइल, देख सकते हैं।

मैं शायद इस निष्कर्ष पर निष्कर्ष निकाला हूं कि ओवरराइड फ़ाइल पहले सूचीबद्ध है, इसे पहले लोड किया जा रहा है, फिर क्लासपाथ से 'डिफ़ॉल्ट' प्रोफ़ाइल-विशिष्ट फ़ाइल द्वारा ओवरराइड किया गया है, जो बाद में सूचीबद्ध है।हालांकि, मैं सराहना करता हूं कि लॉग में लिस्टिंग का क्रम आवश्यक व्यवहार से संबंधित नहीं है। और मैंने spring.config.location संपत्ति पर घोषित पथों के क्रम को बदलने की कोशिश की है, ताकि classpath:file:... से पहले सूचीबद्ध हो लेकिन इससे मदद नहीं मिली है और मुझे यह विश्वास नहीं होगा कि वसंत-बूट दस्तावेज़ स्पष्ट रूप से बताता है कि डिफ़ॉल्ट गुण स्थान हमेशा खोजे जाते हैं भले ही आप spring.config.location के लिए कोई मूल्य प्रदान करते हैं।

  1. कमांड लाइन तर्क:

    स्प्रिंग-बूट प्रलेखन आदेश है कि गुण वरीयता का अवरोही क्रम , एक स्प्रिंग-बूट निष्पादन योग्य जार के लिए हल कर रहे हैं के बारे में बहुत विशिष्ट है।

  2. जावा सिस्टम गुण (System.getProperties())।
  3. ओएस पर्यावरण चर।
  4. JNDI से java:comp/env
  5. एक RandomValuePropertySource केवल random.* में गुण है कि जिम्मेदार बताते हैं।
  6. आवेदन गुण अपने पैक जार के बाहर (application.properties YAML और प्रोफ़ाइल वेरिएंट सहित)।
  7. आवेदन गुण (YAML और प्रोफ़ाइल वेरिएंट सहित application.properties) पैक के अंदर अपने जार।
  8. @PropertySource आपके @Configuration कक्षाओं पर एनोटेशन।
  9. डिफ़ॉल्ट गुण (SpringApplication.setDefaultProperties का उपयोग करके निर्दिष्ट)। गुण बाहर से अधिक संपत्तियों अंदर अपने जार - लाइनों 6 और 7 के

लें टिप्पणी।

क्या कहा गया है नहीं कर रहा है, जहाँ तक मैं देख सकता हूँ, और मेरे भ्रम की स्थिति/मुद्दे का स्रोत हो सकता है, जो क्या होता है जब आप नहीं रहे एक जार लेकिन एक विस्फोट निर्देशिका (और इसलिए PropertiesLauncher उपयोग कर रहा है ।)

तो एक विस्फोट निर्देशिका के व्यवहार क्या एक जार के लिए कहा गया के साथ संगत कर रहे थे, मैं उम्मीद थी कि /local/appname/dev/overrides/application.properties में घोषित संपत्तियों के मूल्यों में एक ही नाम classpath:application-dev.properties में घोषित की किसी भी ओवरराइड होगा, लेकिन यह नहीं है ऐसा लगता है प्रतीत होता है।

इसके अलावा वसंत-बूट प्रलेखन (PropertiesLauncher पर परिशिष्ट C.4) से विख्यात loader.home संपत्ति है, जो 'के रूप में ... [यह] अतिरिक्त गुणों का स्थान फाइल, जैसे वर्णन किया गया है का उल्लेख है/opt/app (${user.dir} पर डिफ़ॉल्ट) '।

इसलिए मैंने spring.config.location के बजाय loader.home का उपयोग करने का प्रयास किया, लेकिन इसका कोई फायदा नहीं हुआ।

(अद्यतन: मैं भी loader.config.location उपयोग करने की कोशिश और मैं दो नोट: (ताकि अपने व्यवहार है यह बजाय एक निर्देशिका की तुलना में एक फ़ाइल चाहते करने लगता है spring.config.location साथ अनुरूप नहीं), और जब मैं किया आपूर्ति मूल निर्देशिका के बजाए एक फ़ाइल पथ, यह अभी भी मदद नहीं करता है।)

क्या कोई यह बता सकता है कि मैं क्या गलत कर रहा हूं, या मैं क्या गलत धारणा बना रहा हूं?

+1

मुझे लगता है कि प्रोफ़ाइल-विशिष्ट गुण हमेशा प्राथमिकता लेते हैं। क्या आपने स्थानीय 'एप्लिकेशन-देव.प्रोपर्टीज' का प्रयास किया था? –

+0

@ डेव - मैंने उन सभी चीजों की कोशिश की है जिन पर चर्चा की गई है। क्या आप मदद कर सकते हैं? मेरा सवाल - http://stackoverflow.com/questions/36635163/spring-boot-externalizing-properties-not-working/36635367?noredirect=1#comment60919038_36635367 – Shiv

उत्तर

8

धन्यवाद, डेव, आपका सुझाव 100% सही था।

अगर मैं नाम बदलने गुण /local/appname/dev/overrides तो application-dev.properties करने के लिए फ़ाइल है कि फ़ाइल से संपत्ति मूल्यों ओवरराइड classpath:application-dev.properties में लोगों से करते हैं।

मुझे यकीन है कि मैं कल इस संयोजन कोशिश की थी, लेकिन मुझे लगता है कि यह काम कर रहा था जब मैं spring.config.location निर्दिष्ट करने के साथ चारों ओर खेल रहा था बंद कर दिया है और है कि गलत तो यह में ओवरराइड फ़ाइल के लिए नहीं देख रहा था सही जगह।

+0

@ डेव - मैंने यहां सबकुछ की कोशिश की है जिस पर चर्चा की गई है। क्या आप कृपया मदद करें? मेरा सवाल - http://stackoverflow.com/questions/36635163/spring-boot-externalizing-properties-not-working/36635367?noredirect=1#comment60919038_36635367 – Shiv

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