2011-11-28 10 views
7

Chciałbym wydrukować skonsolidowaną listę właściwości ustawionych w naszej aplikacji podczas uruchamiania. Jaki jest najlepszy sposób na zrobienie tego?Drukowanie wszystkich właściwości ustawionych za pomocą Spring PropertyPlaceholderConfigurer

Dzięki

+1

Możliwy duplikat [Sprężyna: dostęp wszystkie właściwości środowiska jako obiektu mapy lub Properties] (https://stackoverflow.com/questions/23506471/spring-access-all-environment-properties-as-a-map-or-properties-object) – Cherry

Odpowiedz

4

użyć niestandardowego PropertyPlaceholderConfigurer implementation który zastępuje metod resolve... i rejestruje nazwę placeholder. Być może będziesz potrzebować/chcesz zastąpić metody convert..., ale powinna sobie z tym poradzić resolve....

5

To jest moje wykonanie:

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

klasa bazowa nie ma metody –

+0

Słabość rozwiązania - jeśli każda właściwość zawiera błąd - nigdy tego nie zobaczysz właściwości w pliku dziennika, ponieważ afterPropertiesSet() nie zostanie wywołany. – rauch

+4

Nie działa dla mnie, żadnych właściwości na liście. –

1

Oto konkretny przykład drukowanie wszystkich właściwości:

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

Słabość tego rozwiązania polega na tym, że drukuje on wszystkie odwzorowania właściwości źródeł indywidualnie, niezależnie od wartości duplikowanych dla kluczy nadpisanych, zamiast drukowania wartości wynikowych dla wszystkich właściwości. –

Powiązane problemy