2011-11-28 6 views
7

के माध्यम से सेट सभी गुणों को प्रिंट करना मैं स्टार्टअप पर हमारे आवेदन में सेट की गई समेकित सूची की समेकित सूची मुद्रित करना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है?स्प्रिंग प्रॉपर्टीप्लेसहोल्डर कॉन्फ़िगरर

धन्यवाद

+1

की संभावित डुप्लिकेट [स्प्रिंग: पहुँच एक नक्शे या गुण वस्तु के रूप में सभी पर्यावरण गुण] (https://stackoverflow.com/questions/23506471/spring-access-all-environment-properties-as-a-map-or-properties-object) – Cherry

उत्तर

4

एक कस्टम PropertyPlaceholderConfigurer implementation कि resolve... तरीकों को ओवरराइड करता है और placeholder नाम लॉग का उपयोग करें। आपको convert... विधियों को ओवरराइड करने की आवश्यकता भी हो सकती है, लेकिन resolve... इसे संभालना चाहिए।

5

यह मेरा दिया गया है:

public class CustomPropertySourcesPlaceholderConfigurer extends PropertySourcesPlaceholderConfigurer implements InitializingBean{ 

    public void afterPropertiesSet(){ 
     try{ 
      Properties loadedProperties = this.mergeProperties(); 
      for(Entry<Object, Object> singleProperty : loadedProperties.entrySet()){ 
       logger.info("LoadedProperty: "+singleProperty.getKey()+"="+singleProperty.getValue()); 
      } 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

बेस क्लास में विधि नहीं है –

+0

आपके समाधान की कमजोरी - अगर किसी भी संपत्ति में त्रुटि है - आप इन सब को कभी नहीं देख पाएंगे बाद में लॉग फ़ाइल में गुण PropertiesSet() को नहीं बुलाया जाएगा। – rauch

+4

मेरे लिए काम नहीं करता है, सूची में कोई गुण नहीं है। –

1

यहाँ सभी गुण मुद्रण का एक ठोस उदाहरण है:

import org.springframework.beans.BeansException; 
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; 
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; 
import org.springframework.web.context.support.StandardServletEnvironment; 

public class PropertiesLoaderConfigurer 
    extends PropertySourcesPlaceholderConfigurer { 

    private static final String ENVIRONMENT_PROPERTIES = "environmentProperties"; 

    @Override 
    public void postProcessBeanFactory(
     final ConfigurableListableBeanFactory beanFactory) 
     throws BeansException { 

     super.postProcessBeanFactory(beanFactory); 

     final StandardServletEnvironment propertySources = 
      (StandardServletEnvironment) super.getAppliedPropertySources().get(ENVIRONMENT_PROPERTIES).getSource(); 

     propertySources.getPropertySources().forEach(propertySource -> { 
      if (propertySource.getSource() instanceof Map) { 
       // it will print systemProperties, systemEnvironment, application.properties and other overrides of 
       // application.properties 
       System.out.println("#######" + propertySource.getName() + "#######"); 

       final Map<String, String> properties = mapValueAsString((Map<String, Object>) propertySource.getSource()); 
       System.out.println(properties); 
      } 
     }); 
    } 

    private Map<String, String> mapValueAsString(
     final Map<String, Object> map) { 

     return map.entrySet().stream() 
      .collect(Collectors.toMap(entry -> entry.getKey(), entry -> toString(entry.getValue()))); 
    } 

    private String toString(
     final Object object) { 

     return Optional.ofNullable(object).map(value -> value.toString()).orElse(null); 
    } 
} 
+0

इस समाधान की कमजोरी यह है कि यह सभी स्रोतों के लिए केवल परिणाम मान मुद्रित करने के बजाय ओवरराइड कुंजी के लिए अलग-अलग संभवतः डुप्लीकेट मानों के सभी स्रोतों को मैपिंग प्रिंट करता है। –

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