2017-09-18 2 views
0

Le printemps 3.1 PropertySourcesPlaceholderConfigurerjavadoc dit:Comment utiliser `PropertySourcesPlaceholderConfigurer` pour lire la variable d'environnement Spring NOT propriété système

Cette classe est conçue comme un remplaçant pour PropertyPlaceholderConfigurer dans les applications Spring 3.1.

Mais je ne vois pas de façon évidente de reproduire la fonctionnalité de searchSystemEnvironment propriété de PropertyPlaceholderConfigurer, ce qui rend le look configurateur pour une variable d'environnement lorsqu'aucune propriété système correspondant au nom de l'espace réservé se trouve .

Notez que j'ai vu beaucoup de questions à poser des SO sur les « variables d'environnement » et PropertySourcesPlaceholderConfigurer, mais tous ceux que j'ai vu est en fait poser des questions sur les propriétés du système, et non pas des variables d'environnement.

Comment puis-je dire à PropertySourcesPlaceholderConfigurer de revenir à la fourniture de valeurs de substitution à l'aide de variables d'environnement?

Répondre

1

chose Firs à noter est cet extrait de la Javadoc

Toutes les propriétés locales (par exemple ceux qui sont ajoutés par PropertiesLoaderSupport.setProperties(java.util.Properties), PropertiesLoaderSupport.setLocations(org.springframework.core.io.Resource...) et al.) Sont ajoutés en tant que PropertySource. La priorité de recherche des propriétés locales est basée sur la valeur de la propriété localOverride, dont est par défaut false, ce qui signifie que les propriétés locales doivent être recherchées dernière, après toutes les sources de propriétés d'environnement.

En d'autres termes, le PropertySourcesPlaceholderConfigurer a ses propres sources locales de propriété, qu'il cherche, par défaut, après les sources de propriété enregistrés directement dans l'environnement, à savoir. une instance de type ConfigurableEnvironment.

Le Javadoc de ConfigurableEnvironment, dans getSystemPropeties() et getSystemEnvironment(), poursuit en disant que

Renvoie la valeur de System.getProperties() si on les laisse par le courant SecurityManager, sinon retourner une implémentation carte qui tentative d'accès individuelle touches utilisant les appels à System.getProperty(String).

Notez que la plupart des implémentations Environmentcomprendra ce système propriétés carte comme un défaut PropertySource à rechercher.

[...]]

Renvoie la valeur de System.getenv() si on les laisse par le courant SecurityManager, sinon retourner une implémentation carte qui tentative d'accès à des touches individuelles à l'aide des appels à System.getenv(String)

Notez que la plupart des Environment implémentations comprendra ce système carte d'environnement par défaut PropertySource à rechercher.

Ces Environment implémentations sont StandardEnvironment, qui est ApplicationContext cours de la valeur par défaut Spring utilisent.

Cette classe précise Javadoc

En plus des fonctions habituelles d'une ConfigurableEnvironment telle que la résolution des biens et des activités liées au profil, cette implémentation configure deux sources de propriété par défaut, à rechercher dans l'ordre suivant:

  • propriétés du système
  • variables d'environnement système

C'est, si la "xyz" clé est présente à la fois dans les propriétés du système JVM ainsi que dans l'ensemble des variables d'environnement pour le processus actuel, la valeur de la clé "xyz" à partir des propriétés du système retournera d'un appel à environment.getProperty("xyz"). Cette commande est choisie par défaut car les propriétés du système sont par JVM, tandis que les variables d'environnement peuvent être les mêmes sur de nombreuses machines JVM sur un système donné. La priorité des propriétés système permet de remplacer les variables d'environnement par JVM.

Ces sources de propriété sont modifiables et modifiables. Mais, pour répondre à votre question, le comportement que vous demandez est déjà fourni par défaut.

+0

Bonne réponse. Je vous remercie. Et pour résumer: "Il étend automatiquement les variables d'environnement, par défaut". – 0xbe5077ed