web-dev-qa-db-fra.com

Spring Boot comment définir spring.config.location dans application.properties pour yaml

J'utilise Spring Boot 1.4.2 et essaie maintenant de définir les propriétés.

J'ai quatre cas d'utilisation de .properties et .yml avec des systèmes de fichiers externes (à l'intérieur des ressources) et locales (dossier de projet externe).

Le .properties external (dans le dossier de ressources) fonctionne bien à la fois @Value ($ {property.name}) et @PropertySource du dernier attribut de valeur d'utilisation pouvant être chargé à partir du système de fichiers .

@Component
@PropertySource(value="file:C:\\properties\\application-dev.properties")
@PropertySource(value="file:C:\\properties\\application-test.properties")
public class ExternalProperties {
   // ...
}

Mais .yml ne fonctionne pas bien sous le dossier de ressources lorsque le nom de fichier 'application.yml'

Le fichier .yml peut être chargé par @ConfigurationProperties et nécessite 'propdeps-plugin'

mon fichier .yml

environments:
    dev:
        url: http://dev.bar.com
        name: Developer Setup
    prod:
        url: http://foo.bar.com
        name: My Cool App

Ce code fonctionne bien

@Component
// external(inside resources)
@ConfigurationProperties(prefix="environments")
// outside project folder
@ConfigurationProperties(locations={"file:C:\\properties\\application.yml"}, prefix = "environments")
public class YamlProperties {

    private Map<String, String> dev = new HashMap<>();
    private Map<String, String> prod = new HashMap<>();

    public Map<String, String> getDev() {
        return this.dev;
    }

    public Map<String, String> getProd() {
        return this.prod;
    }
}

Ce code a un problème d'attribut deprecated location (j'ai lu beaucoup d'articles mais je ne peux pas comprendre clairement), donc j'ai besoin de trouver la documentation API et de trouver 'ConfigFileApplicationListener' dans cette section .

# SPRING CONFIG - using environment property only (ConfigFileApplicationListener)
spring.config.location= # Config file locations.
spring.config.name=application # Config file name.

Écrivez donc la propriété ci-dessus sur application.properties comme ceci.

spring.config.location=file:C:\\properties\\application.yml
spring.config.name=application

et rechargement de la propriété .yml (je n'ai pas essayé d'exécuter jar. J'utilise war et test via Controller)

@Component
@ConfigurationProperties(prefix="environments")
public class YamlProperties {

     private Map<String, String> dev = new HashMap<>();
     private Map<String, String> prod = new HashMap<>();

     public Map<String, String> getDev() {
         return this.dev;
     }

     public Map<String, String> getProd() {
         return this.prod;
     }
}

Ce code n'a pas chargé le fichier .yml à partir du lecteur C: du système de fichiers local, mais il convient alors d'ajouter le fichier application.yml dans le dossier de ressources.

Alors, comment définir le spring.config.location pour charger .yml

Et je veux savoir pourquoi l'attribut location fonctionne encore, bien que déconseillé depuis la version 1.4 ver.

et je me demande comment utiliser ConfigFileApplicationListener. Je ne peux pas suivre le code, il est difficile à comprendre. Donnez un conseil ~!

MODIFIER:

Je manque de comprendre à ce sujet que lorsque la guerre recommence et fait contexte à nouveau en utilisant les propriétés du système de fichiers local. Ce n'est pas le collectivement lié mais reste pour l'étape future.

Le redémarrage de Tomcat que war déploie le nouveau afin que je dispose du fichier système local, il contient des propriétés si je modifie les données de ce fichier que pourrait être mis à jour le contexte de propriétés au redémarrage de Tomcat.

Pourquoi je continue d'essayer ce travail que j'utilise un compte public github et que je protège connecter db info autre chose à. Je reçois ce genre de choses et je passe au suivant problème comme git-encrpt, spring-cloude, nginx, docker. Merci pour toute aide vraiment utile.

3
DANIEL K

Depuis que vous utilisez Spring Boot 1.4.2, tout est simple. Vous devez simplement spécifier un argument supplémentaire pour votre application, tel que Java -jar name-of-application-version.jar --spring.config.location=file:///C:/properties/application.yml. Une méthode plus courante pour y parvenir consiste à définir une option supplémentaire pour JVM telle que Java -Dspring.config.location=file:///d:/private-bootstrap.yml -jar name-of-application-version.jar. Ces deux méthodes devraient fonctionner, car elles fonctionnent bien sur mon bureau.

1
Gemini Keith

Vous pouvez utiliser la propriété spring.config.location lors de l'appel de votre application Spring Boot. Vous trouverez ci-dessous un exemple dans lequel vous avez 4 fichiers de propriétés de nom personnalisé dans des emplacements personnalisés.

Java -Dspring.config.location=file:/gfs/config/post/post.properties,/gfs/config/post/post_pwd.properties,/myDbConfig/config/db-config.properties,/myserver/config/db-passwd.properties  -jar myapp-1.0-SNAPSHOT.jar

Dans votre code, vous pouvez y accéder par:

@Component
public class AppProperties {

    @Value("${post.user.name}")
    private String username;
}
0
Mohith Maratt