web-dev-qa-db-fra.com

config externe de démarrage de printemps

J'essaie de charger un fichier de propriétés externe dans mon application de démarrage printanier . Au départ, j'ai utilisé @PropertySource dans la classe de configuration . Mais je souhaite maintenant supprimer cette annotation afin que la classe ne dépende pas de l'emplacement .so j'ai essayé d'utiliser:

Java -jar my-boot-ws.war --SPRING_CONFIG_NAME=file:///Users/TMP/resources/

basé sur ceci http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html documentation mais j'obtiens l'erreur suivante:

Caused by: Java.lang.IllegalArgumentException: Could not resolve placeholder

l’utilisation de l’annotation fonctionne bien, mais j’aimerais vraiment changer de sujet. Toute aide en la matière serait formidable.

Merci

****** CORRECTION *******

Désolé, erreur de copier-coller, la commande ci-dessus était supposée être:

Java -jar my-boot-ws.war --spring.config.location=file:///Users/TMP/resources/

Je n'essaye pas de changer le nom du fichier de configuration mais d'ajouter un emplacement supplémentaire . Comme expliqué ici:

Si spring.config.location contient des répertoires (par opposition aux fichiers) ils doivent se terminer par/(et seront ajoutés avec les noms générés de spring.config.name avant d'être chargés).

J'ai interprété ceci comme indiquant que le fichier $ {spring.application.name} .properties serait chargé à partir de --spring.config.location transmis à partir de la ligne de commande.

8
peekay

Après quelques recherches supplémentaires, j'ai trouvé ceci Spring Boot et plusieurs fichiers de configuration externes indiquant que l'utilisation suivante est correcte:

Java -jar my-boot-ws.war --spring.config.location=file:///Users/TMP/resources/myFile.properties

J'avais l'impression que --spring.config.location chargerait d'autres fichiers de propriétés dans le répertoire spécifié. selon le post sur le lien que j'ai mentionné, ce n'est pas le cas. sur la base du lien si le répertoire est spécifié, c’est à cet endroit que l’application.properties est recherchée. mais encore une fois la documentation ici http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html semble insinuer que l'application de démarrage de printemps ressemblera sur le chemin de classe en premier et, si disponible, saisissez le nom de l'application pour obtenir des fichiers de propriétés supplémentaires basés sur ce nom. 

cependant, une fois que j'ai spécifié un nom de fichier, tout a bien fonctionné, donc je me suis trompé.

22
peekay

En ligne de commande, vous devez utiliser la propriété ci-dessous pour mentionner un fichier de configuration de démarrage supplémentaire:

--spring.config.location="file:/path/to/application.properties"

Une alternative serait:

-Dspring.config.location="file:/path/to/application.properties"

Notez que les caractères sont en minuscule et que le séparateur de mots est un point. .

Sinon, vous pouvez utiliser une variable d'environnement avec la clé déjà utilisée:

  • Dans un système * nix:

    export SPRING_CONFIG_NAME=file:/path/to/application.properties
    
  • Sous Windows:

    set SPRING_CONFIG_NAME=file:/path/to/application.properties
    
11
tmarwen

Ce n'est peut-être pas un problème commun, mais je l'ai affronté. Vous devez également avoir un application.properties dans votre chemin de classe même lorsque vous le remplacez par --spring.config.name (le mien dans gitignore en raison d’informations sensibles).

4
lgonzales

1) Makesure args passe à l'intérieur de la méthode run

public class GemFireTestLoaderApplication {

public static void main(String[] args) {

        SpringApplication.run(GemFireTestLoaderApplication.class, args);
        }
}

2) Si vous avez configuré en commentaire XML ou supprimez d'abord

<!-- <context:property-placeholder location="classpath:config.properties" />  -->

<!--   <context:property-placeholder location="file:/data/xxx/vaquarkhan/dataLoader/config.properties" /> -->

Commande suivante que vous pouvez utiliser pour transmettre le nom de la propriété

3.1)

Java -jar GemfireTest-0.0.1-SNAPSHOT.jar --spring.config.location=file:///C:/data/xxx/vaquarkhan/dataLoader/test/config.properties

3.2) 

Java -jar GemfireTest-0.0.1-SNAPSHOT.jar --spring.config.location=file:///C:/data/xxx/vaquarkhan/dataLoader/test/config.properties

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

0
vaquar khan