8

Spring Cloud Config Server accepte plusieurs profils et renvoie les propriétés de tous les profils lorsque j'accède au point de terminaison/env de l'application. La réponse répertorie les propriétés spécifiques à chaque profil. Si la même propriété est présente dans deux fichiers de propriétés différents, celui qui est défini en dernier est prioritaire. Est-il possible d'obtenir la liste finale des clés de propriétés et des valeurs qui seront utilisées par l'application?Liste liste de propriétés finale - Spring Cloud Config Server

+0

Je doute fortement qu'il y ait quelque chose comme ça. Je n'en ai pas rencontré. Mais ce sera formidable de sortir ceci de la boîte et d'obtenir une réponse à cette question. –

+0

Merci pour votre mise à jour, @GrinishNepal! –

Répondre

3

Cela semble être une limitation intentionnelle du Spring Framework.

Voir here

Vous pouvez pirater et injecter l'interface PropertySources, puis une boucle sur tous les objets PropertySource individuels, mais vous devez savoir quelles sont les propriétés que vous cherchez.

4

Cloud Config application client

J'ai essayé différentes façons et trouvé les éléments suivants (accidentellement):

GET /env/.* retours liste complète des propriétés de configuration

Cloud Config Application Server

Il s'avère que ceci est déjà implémenté, mais pas documenté l. Tout ce que vous avez besoin est de demander json, yml ou properties selon les modèles:

/{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; 
    } 

} 

Désolé ... ceci est la première fois que répondre à une question ici. J'ai créé un compte spécifiquement à répondre à cette question parce que je suis tombé dessus tout en recherchant le même problème. J'ai trouvé une solution qui a fonctionné pour moi et j'ai décidé de le partager.

va ici mon explication de ce qui a été fait:

  1. J'initialize un nouvel objet « Propriétés » (pourrait être un HashMap ou tout ce que vous voulez)

  2. Je recherche la source de propriété pour le "bootstrapProperties" qui est un objet CompositePropertySource. Cette propriété contient toutes les propriétés d'application qui ont été chargées.

  3. boucle

    I à travers tous les noms de propriété est revenu de la méthode « getPropertyNames » sur l'objet CompositePropertySource et créer une nouvelle entrée de la propriété.

  4. Je renvoie l'objet de propriétés.

+0

Veuillez noter: les réponses au code seulement sont déconseillées. Il est toujours préférable d'ajouter un certain niveau d'explications. – GhostCat

+0

Je ne vois pas toutes les propriétés. Par exemple 'logging.config' de' bootstrap.yml'. Cependant, je le vois en utilisant un actionneur. –

+0

Merci @Todd Jones !! –

2
  1. Externalized Configuration

Spring Boot vous permet d'externaliser votre configuration afin que vous puissiez travailler avec le même code d'application dans des environnements différents.Vous pouvez utiliser des fichiers de propriétés, des fichiers YAML, des variables d'environnement et des arguments de ligne de commande pour externaliser la configuration. Les valeurs de propriété peuvent être injectées directement dans vos beans à l'aide de l'annotation @Value, accessible via l'abstraction Spring ou via des objets structurés via @ConfigurationProperties. Spring Boot utilise un ordre PropertySource très particulier conçu pour permettre un dépassement sensé des valeurs. Les propriétés sont considérées dans l'ordre suivant:

  • DevTools propriétés globales des paramètres de votre répertoire personnel (~/.spring-boot-devtools.properties lorsque devtools est actif).
  • Annotations @TestPropertySource sur vos tests.
  • @ SpringBootTest # attribut d'annotation de propriétés sur vos tests.
  • Arguments de ligne de commande.
  • Propriétés de SPRING_APPLICATION_JSON (JSON intégré incorporé dans une variable d'environnement ou une propriété système)
  • Paramètres d'initialisation ServletConfig.
  • Paramètres d'initialisation ServletContext.
  • Attributs JNDI de java: comp/env.
  • Propriétés système Java (System.getProperties()).
  • Variables d'environnement du système d'exploitation.
  • RandomValuePropertySource qui n'a que des propriétés au hasard. *.
  • propriétés d'application spécifiques à un profil extérieur de votre pot emballé (Application- {} profil .properties et YAML variantes)
  • propriétés d'application spécifiques à un profil empaquetés dans votre pot (Application- {} profil .properties et variantes YAML)
  • Propriétés de l'application en dehors de votre fichier jar (applications.properties et variantes YAML).
  • Propriétés de l'application regroupées dans votre fichier jar (applications.properties et variantes YAML).
  • @PropertySource annotations sur vos classes @Configuration.
  • Propriétés par défaut (spécifiées à l'aide de SpringApplication.setDefaultProperties).

Le programme ci-dessous imprime les propriétés à partir de l'environnement d'amorçage du ressort.

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

Merci Sudhakar. Je vais essayer ça. –