Printing all properties set via Spring PropertyPlaceholderConfigurer

后端 未结 3 2070
执念已碎
执念已碎 2021-02-14 09:08

I’d like to print the consolidated list of properties set in our application on startup. What is the best way to do this?

Thanks

3条回答
  •  悲哀的现实
    2021-02-14 09:36

    Here is a concrete example of printing all properties :

    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 properties = mapValueAsString((Map) propertySource.getSource());
                    System.out.println(properties);
                }
            });
        }
    
        private Map mapValueAsString(
            final Map 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);
        }
    }
    

提交回复
热议问题