2017-05-22 11 views
8

स्प्रिंग क्लाउड कॉन्फ़िगर सर्वर एकाधिक प्रोफ़ाइल स्वीकार करता है और जब मैं एप्लिकेशन के/env endpoint तक पहुंचता हूं तो सभी प्रोफाइल के लिए गुण देता है। प्रतिक्रिया प्रत्येक प्रोफ़ाइल के लिए विशिष्ट गुणों की सूची है। यदि एक ही संपत्ति 2 अलग-अलग संपत्ति फ़ाइलों में मौजूद है, तो जिसे अंतिम रूप में परिभाषित किया गया है वह प्राथमिकता लेता है। क्या संपत्ति कुंजी और मूल्यों की अंतिम सूची प्राप्त करने का कोई तरीका है जिसका उपयोग एप्लिकेशन द्वारा किया जाएगा?गुणों की अंतिम सूची सूची - स्प्रिंग क्लाउड कॉन्फ़िगर सर्वर

+0

मुझे संदेह है कि ऐसा कुछ भी है। किसी भी पार नहीं आया है। लेकिन बॉक्स से बाहर निकलना और इस सवाल का जवाब प्राप्त करना बहुत अच्छा होगा। –

+0

आपके अपडेट के लिए धन्यवाद, @GrinishNepal! –

उत्तर

3

यह वसंत फ्रेमवर्क की जानबूझकर सीमा प्रतीत होता है।

here

देखें आप इसे हैक और PropertySources इंटरफेस है, तो सभी अलग-अलग PropertySource वस्तुओं से अधिक पाश इंजेक्षन सकता है, लेकिन आप को पता है कि आप क्या गुण देख रहे हैं होगा।

4

बादल कॉन्फ़िग क्लाइंट अनुप्रयोग के लिए

मैं अलग अलग तरीकों की कोशिश की और पाया है (गलती से) के बाद: विन्यास गुण

बादल कॉन्फ़िग सर्वर अनुप्रयोग के लिए की

GET /env/.* रिटर्न पूरी सूची

यह पता चला है कि यह पहले ही लागू हो चुका है, लेकिन दस्तावेज नहीं है एल। आप सभी की जरूरत पैटर्न के अनुसार json, yml या properties अनुरोध करने के लिए है:

/{application}-{profile}.{ext} 
/{label}/{application}-{profile}.{ext} 
3
import java.util.properties; 

import org.springframework.core.env.AbstractEnvironment; 
import org.springframework.core.env.CompositePropertySource; 
import org.springframework.core.env.Environment; 

public class MyClass { 
    @Autowired 
    private Environment env; 

    Properties getProperties() { 
    Properties props = new Properties(); 
    CompositePropertySource bootstrapProperties = (CompositePropertySource) ((AbstractEnvironment) env).getPropertySources().get("bootstrapProperties"); 
    for (String propertyName : bootstrapProperties.getPropertyNames()) { 
     props.put(propertyName, bootstrapProperties.getProperty(propertyName)); 
    } 

    return props; 
    } 

} 

क्षमा करें ... यह मेरा पहली बार एक सवाल यहाँ उत्तर दे रहा है। मैंने विशेष रूप से पर एक खाता बनाया है जो इस प्रश्न का उत्तर देता है क्योंकि मैं उसी मुद्दे पर शोध करते समय उस पर आया था। मुझे समाधान मिला जो मेरे लिए काम करता था और इसे साझा करने का फैसला करता था।

  1. मैं एक नया "गुण" वस्तु को प्रारंभ

  2. मैं के लिए संपत्ति स्रोत देखने (एक HashMap या जो कुछ भी किसी और आप चाहते हैं हो सकता है):

    यहाँ क्या किया था की मेरी व्याख्या चला जाता है "बूटस्ट्रैपप्रॉपर्टीज" जो एक कंपोजिटप्रॉपर्टी स्रोत ऑब्जेक्ट है। इस संपत्ति स्रोत में लोड किए गए सभी एप्लिकेशन गुण शामिल हैं।

  3. मैं सभी संपत्ति के नाम के माध्यम से लूप CompositePropertySource वस्तु पर "getPropertyNames" विधि से लौटे हैं और एक नया संपत्ति प्रविष्टि बनाने के।

  4. मैं गुण वस्तु वापस करता हूं।

+0

कृपया ध्यान दें: कोड केवल उत्तर ही निराश हैं। कुछ स्तरों के स्पष्टीकरण जोड़ने के लिए यह हमेशा बेहतर होता है। – GhostCat

+0

मुझे सभी संपत्तियां दिखाई नहीं देती हैं। उदाहरण के लिए 'bootstrap.confl'' bootstrap.confl' से। हालांकि, मैं इसे actuator का उपयोग कर देखता हूँ। –

+0

धन्यवाद @ टोड जोन्स !! –

2
  1. Externalized Configuration

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

स्प्रिंग बूट एक बहुत ही विशेष प्रॉपर्टीसोर्स ऑर्डर का उपयोग करता है जिसे मूल्यों के समझदार ओवरराइडिंग की अनुमति देने के लिए डिज़ाइन किया गया है। गुण निम्न क्रम में माना जाता है:

  • (~/.spring-बूट-devtools.properties जब DevTools सक्रिय है) अपने घर निर्देशिका पर वैश्विक सेटिंग्स गुण DevTools। आपके परीक्षणों पर
  • @TestPropertySource एनोटेशन।
  • @ SpringBootTest # गुण आपके परीक्षणों पर एनोटेशन विशेषता।
  • कमांड लाइन तर्क। SPRING_APPLICATION_JSON से
  • गुण (इनलाइन JSON एक वातावरण चर या प्रणाली संपत्ति में एम्बेडेड)
  • ServletConfig init मानकों।
  • ServletContext init पैरामीटर।
  • जेएनडीआई जावा से गुण: comp/env।
  • जावा सिस्टम गुण (System.getProperties())।
  • ओएस पर्यावरण चर।
  • एक RandomValuePropertySource जिसमें केवल यादृच्छिक गुण हैं। *।
  • प्रोफ़ाइल विशिष्ट अपने पैक जार के बाहर आवेदन गुण (आवेदन के {प्रोफ़ाइल} .properties और YAML वेरिएंट)
  • प्रोफ़ाइल-विशिष्ट अनुप्रयोग गुण अपने जार के अंदर पैक (आवेदन के {प्रोफ़ाइल} .properties और YAML वेरिएंट)
  • आपके पैक किए गए जार (application.properties और YAML प्रकारों) के बाहर एप्लिकेशन गुण।
  • आपके जार (application.properties और YAML प्रकारों) के अंदर पैक किए गए एप्लिकेशन गुण।
  • @PropertySource टिप्पणियां आपके @ कॉन्फ़िगरेशन कक्षाओं पर।
  • डिफ़ॉल्ट गुण (SpringApplication.setDefaultProperties का उपयोग करके निर्दिष्ट)।

नीचे दिया गया प्रोग्राम वसंत बूट वातावरण से गुणों को प्रिंट करता है।

import org.springframework.beans.BeansException; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ApplicationObjectSupport; 
import org.springframework.core.env.Environment; 
import org.springframework.core.env.MapPropertySource; 
import org.springframework.core.env.MutablePropertySources; 
import org.springframework.core.env.PropertySource; 
import org.springframework.stereotype.Component; 
import org.springframework.web.context.support.StandardServletEnvironment; 

@Component 
public class EnvironmentLogger extends ApplicationObjectSupport { 

    @Override 
    protected void initApplicationContext(ApplicationContext context) throws BeansException { 
     Environment environment = context.getEnvironment(); 
     String[] profiles = environment.getActiveProfiles(); 
     if(profiles != null && profiles.length > 0) { 
      for (String profile : profiles) { 
       System.out.print(profile); 
      }   
     } else { 
      System.out.println("Setting default profile"); 
     } 

     //Print the profile properties 
     if(environment != null && environment instanceof StandardServletEnvironment) { 
      StandardServletEnvironment env = (StandardServletEnvironment)environment; 
      MutablePropertySources mutablePropertySources = env.getPropertySources(); 
      if(mutablePropertySources != null) { 
       for (PropertySource<?> propertySource : mutablePropertySources) { 
        if(propertySource instanceof MapPropertySource) { 
         MapPropertySource mapPropertySource = (MapPropertySource)propertySource; 
         if(mapPropertySource.getPropertyNames() != null) { 
          System.out.println(propertySource.getName()); 
          String[] propertyNames = mapPropertySource.getPropertyNames(); 
          for (String propertyName : propertyNames) { 
           Object val = mapPropertySource.getProperty(propertyName); 
           System.out.print(propertyName); 
           System.out.print(" = " + val); 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+0

सुधाकर धन्यवाद। मैं कोशिश करूँगा –

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