2016-07-12 11 views
9

पर आधारित स्प्रिंग बूट एप्लिकेशन.प्रोपर्टी सेट करें मेरे पास एक स्प्रिंग बूट एप्लिकेशन है जो विभिन्न वातावरणों में चलाएगा और पर्यावरण के आधार पर चलता है, यह एक अलग डेटाबेस से कनेक्ट होगा।पर्यावरण परिवर्तनीय

application-local.properties:

spring.datasource.platform=postgres 
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb 
spring.datasource.username=dbuser 
spring.datasource.password=123456789 

application-someserver.properties: मैं कुछ application.properties फ़ाइलें, एक प्रत्येक परिवेश के लिए है जो इस तरह की तरह लग रही है

spring.datasource.platform=postgres 
spring.datasource.url=jdbc:postgresql://someserver:5432/myproddb 
spring.datasource.username=produser 
spring.datasource.password=productionpass 

आदि आदि

में से प्रत्येक पर मेरी वातावरण, मेरे पास MYENV नामक एक पर्यावरण चर है जो पूर्व के लिए पर्यावरण के प्रकार पर सेट है पर्याप्त local या someserver (application-{env}.properties फ़ाइलों का नाम पूरी तरह से पर्यावरण के नाम से मेल खाता है)।

मैं इस पर्यावरण चर को पढ़ने के लिए वसंत बूट कैसे प्राप्त कर सकता हूं और स्वचालित रूप से सही .properties फ़ाइल चुन सकता हूं? मैं इस पैकेज को तैनात करने के तरीके के कारण पूरे -Dspring.profiles.active=someserver को नहीं करना चाहता (यह एक जार के रूप में नहीं चल रहा है)।

उत्तर

12

मैं इस पर्यावरण परिवर्तनीय को पढ़ने के लिए वसंत बूट कैसे प्राप्त कर सकता हूं और स्वचालित रूप से सही .properties फ़ाइल चुन सकता है?

बताएँ स्प्रिंग बूट MYENV संपत्ति या वातावरण चर से सक्रिय प्रोफ़ाइल चयन करने के लिए। ऐसा करने का एक तरीका यह आपके application.properties में निम्नलिखित जोड़ने के लिए है:

spring.profiles.active=${MYENV} 

इस तरह स्प्रिंग बूट MYENV वातावरण चर के मूल्य के spring.profiles.active सेट हो जाएगा।

मैं पूरी करना है नहीं करना -Dspring.profiles.active = someserver क्योंकि जिस तरह से इस पैकेज तैनात किया जाता है (यह के रूप में एक जार में चल नहीं किया जाएगा)

की यदि आप -D तर्कों के माध्यम से सिस्टम प्रॉपर्टी पास करना पसंद नहीं करते हैं, तो आप उस spring.profiles.active पर संबंधित पर्यावरण चर का उपयोग कर सकते हैं। वह संबंधित पर्यावरण चर SPRING_PROFILES_ACTIVE है। उदाहरण के लिए यदि आप SPRING_PROFILES_ACTIVE से local पर सेट करते हैं, तो local प्रोफ़ाइल सक्रिय हो जाएगी। यदि आप MYENV पर्यावरण चर का उपयोग करने का आग्रह कर रहे हैं, तो पहला समाधान जाने का तरीका है।

+0

यह इतना है कि में env चर किसी भी फाइल से मेल नहीं खाता, एक मानक चुन लिया जाता है एक "डिफ़ॉल्ट" विन्यास के लिए संभव है? –

+7

'spring.profiles.active = $ {MYENV: defaultValue}' –

+0

इसके अलावा, 'application.properties' में डिफ़ॉल्ट और सामान्य कॉन्फ़िगरेशन डालें। इसका हमेशा उपयोग किया जाएगा लेकिन प्रोफाइल विशिष्ट कॉन्फ़िगरेशन के संबंध में कम प्राथमिकता के साथ –

0

यदि आप उस कंटेनर को कुछ कंटेनर (टोमकैट, वेबलॉगिक, ...) पर तैनात कर रहे हैं तो आप पर्यावरण चर निर्दिष्ट कर सकते हैं। उदाहरण के लिए पर्यावरण परिवर्तनीय application1.spring.profiles.active=someserver निर्दिष्ट करें और फिर अपने application.properties में संपत्ति spring.profiles.active=${application1.spring.profiles.active}

0

वसंत संदर्भ 5 का उपयोग करने दें।0 मैं सफलतापूर्वक निम्नलिखित एनोटेशन

@PropertySources({ 
    @PropertySource("classpath:application.properties"), 
    @PropertySource("classpath:application-${MYENV:test}.properties")}) 

यहाँ MYENV मूल्य प्रणाली वातावरण से पढ़ा जाता है और अगर सिस्टम वातावरण मौजूद नहीं है तो डिफ़ॉल्ट परीक्षण वातावरण संपत्ति फ़ाइल के माध्यम से सही संपत्ति सिस्टम वातावरण के आधार पर फ़ाइल लोड लोड किया जाएगा, अगर हासिल किया मैं एक गलत MYENV मान देता हूं - यह एप्लिकेशन शुरू करने में विफल हो जाएगा।

नोट: प्रत्येक प्रोफ़ाइल के लिए, आप को बनाए रखने की है कि आप एक आवेदन के [प्रोफ़ाइल] .property फ़ाइल बनाने की जरूरत चाहते हैं और 5.0 & हालांकि मैं वसंत संदर्भ में प्रयोग किया जाता बूट वसंत नहीं - मेरा मानना ​​है कि यह भी वसंत 4.1 पर काम करेंगे

यह वह जगह है सबसे अच्छा समाधान मैं अपने एडब्ल्यूएस लैम्ब्डा के लिए विश्वास करते हैं - कम से कम निर्भरता के साथ

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