2015-01-13 11 views
6

स्प्रिंग बूट के साथ प्रोजेक्ट पर हम application.properties का उपयोग करते हैं लेकिन बाहरी कॉन्फ़िगरेशन के आधार पर इन गुणों में से कुछ को कॉन्फ़िगर करने की आवश्यकता है (जैसे लॉगिंग स्तर की पोर्ट संख्या)। हम एपीआई के माध्यम से कॉन्फ़िगरेशन तक पहुंचते हैं, इसलिए यह केवल रनटाइम पर ही जाना जाता है।रनटाइम पर स्प्रिंग/स्प्रिंग बूट गुणों को सेट/ओवरराइड करें

क्या रनटाइम पर कुछ वसंत गुणों को ओवरराइड या सेट करने का कोई तरीका है (उदाहरण के लिए एक बीन का उपयोग करना) और यदि हां यह कैसे प्राप्त किया जा सकता है?

+0

मुझे समझ में नहीं आता है। आप अपने 'पर्यावरण' के लिए डेटा के विभिन्न स्रोतों के सभी प्रकार का उपयोग कर सकते हैं। क्या आपने दस्तावेज़ों को पढ़ा था: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config? यह क्यों काम नहीं करता है? –

उत्तर

1

क्या आप चर में पास करने के लिए सिस्टम गुणों का उपयोग कर सकते हैं? यदि आप PropertyPlaceholderConfigurer कॉन्फ़िगर करते हैं तो आप सिस्टम गुणों बनाम फ़ाइल गुणों की प्राथमिकता सेट कर सकते हैं।

उदाहरण के लिए, कुछ की तरह:

@Bean public PropertyPlaceholderConfigurer placeHolderConfigurer() { 
    PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer() 
    props.setSystemPropertiesMode(PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE) 
    props.setLocations(new 
PathMatchingResourcePatternResolver().getResources("classpath:/**.properties")); 
    props 
} 

ऊपर अपने .properties फ़ाइल लोड होगा, लेकिन हम प्राथमिकता सेट पहली प्रणाली चर हो सकता है, इसलिए यदि आप एक प्रणाली चर सेट है कि एक ही चर पर वरीयता दी जाएगी कॉन्फ़िगरेशन में

वैकल्पिक रूप से, the docs को देखते हुए, वसंत अपने पर्यावरण में एक खोज के क्रम को परिभाषित करने की सिफारिश:

मौजूदा विन्यास "systemPropertiesMode" और/या "systemPropertiesModeName का उपयोग करता है [PropertyPlaceholderConfigurer अभी भी उपयोग के लिए उपयुक्त है जब है] " गुण। उपयोगकर्ताओं को को इन सेटिंग्स का उपयोग करने से दूर जाने के लिए प्रोत्साहित किया जाता है, और कंटेनर के पर्यावरण के माध्यम से संपत्ति स्रोत खोज आदेश कॉन्फ़िगर करें; हालांकि, कार्यक्षमता का सटीक संरक्षण जारी रखकर रख सकता है PropertyPlaceholderConfigurer का उपयोग करें।

उम्मीद है कि उपरोक्त में से एक को आपको जो चाहिए उसे हल करना चाहिए?

+1

मैं एक स्प्रिंग बूट ऐप में 'PropertyPlaceholderConfigurer' का उपयोग करने की अनुशंसा नहीं करता (यह पहले से ही प्रदान किया गया है)। –

6

आप बस चित्रण के प्रयोजन के लिए Spring Cloud Config

के साथ ऐसा कर सकता है, यहां कार्यावधि में गतिशील संपत्ति ओवरराइड देखने के लिए एक अपेक्षाकृत जल्दी तरीका है:

पहले, अपने सेम को लेने के लिए सक्षम होने के लिए के लिए बदल गुण, आप

@RefreshScope 

साथ उस पर टिप्पणी करने की जरूरत है अपने वसंत बूट अनुप्रयोग, Gradle के लिए जैसे के लिए वसंत बादल निर्भरता जोड़ें

compile group: 'org.springframework.cloud', name: 'spring-cloud-starter', version: '1.1.1.RELEASE' 

(नायब तुम भी वसंत बूट actuator निर्भरता की जरूरत है।)

एप्लिकेशन चल रहा है के साथ, आप यदि आप एक संपत्ति है 'मेरे जैसे

http://localhost:8080/env 

जैसे अपने वर्तमान config देख सकते हैं। प्रॉपर्टी 'एप्लिकेशन.प्रोपर्टीज में, आपको कुछ ऐसा दिखाई देगा:

"applicationConfig: [classpath:/application.properties]": { 
    "my.property": "value1", 
    etc 

मूल्य बदलने के लिए, मेरा पोस्ट करें।संपत्ति 2 = मान/फिर से आवेदन/x-www फार्म-urlencoded

जैसे

curl -X POST http://localhost:8080 -d my.property=value2 

प्राप्त/env रूप env लिए और आप नए मूल्य "प्रबंधक" खंड के अंतर्गत प्रकट होता देखेंगे

बदले गए गुणों को लागू करने के लिए, खाली पोस्ट/रीफ्रेश करें। अब आपके बीन का नया मूल्य होगा।

+0

क्या यह सिरिंग सिस्टम गुणों के लिए काम करेगा? – gstackoverflow

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