के माध्यम से सेट सभी गुणों को प्रिंट करना मैं स्टार्टअप पर हमारे आवेदन में सेट की गई समेकित सूची की समेकित सूची मुद्रित करना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है?स्प्रिंग प्रॉपर्टीप्लेसहोल्डर कॉन्फ़िगरर
धन्यवाद
के माध्यम से सेट सभी गुणों को प्रिंट करना मैं स्टार्टअप पर हमारे आवेदन में सेट की गई समेकित सूची की समेकित सूची मुद्रित करना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है?स्प्रिंग प्रॉपर्टीप्लेसहोल्डर कॉन्फ़िगरर
धन्यवाद
एक कस्टम PropertyPlaceholderConfigurer
implementation कि resolve...
तरीकों को ओवरराइड करता है और placeholder
नाम लॉग का उपयोग करें। आपको convert...
विधियों को ओवरराइड करने की आवश्यकता भी हो सकती है, लेकिन resolve...
इसे संभालना चाहिए।
यह मेरा दिया गया है:
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();
}
}
}
बेस क्लास में विधि नहीं है –
आपके समाधान की कमजोरी - अगर किसी भी संपत्ति में त्रुटि है - आप इन सब को कभी नहीं देख पाएंगे बाद में लॉग फ़ाइल में गुण PropertiesSet() को नहीं बुलाया जाएगा। – rauch
मेरे लिए काम नहीं करता है, सूची में कोई गुण नहीं है। –
यहाँ सभी गुण मुद्रण का एक ठोस उदाहरण है:
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);
}
}
इस समाधान की कमजोरी यह है कि यह सभी स्रोतों के लिए केवल परिणाम मान मुद्रित करने के बजाय ओवरराइड कुंजी के लिए अलग-अलग संभवतः डुप्लीकेट मानों के सभी स्रोतों को मैपिंग प्रिंट करता है। –
की संभावित डुप्लिकेट [स्प्रिंग: पहुँच एक नक्शे या गुण वस्तु के रूप में सभी पर्यावरण गुण] (https://stackoverflow.com/questions/23506471/spring-access-all-environment-properties-as-a-map-or-properties-object) – Cherry