web-dev-qa-db-fra.com

Comment utiliser les espaces réservés de propriété dans le fichier .yml

Je travaille avec Java et Spring Boot. Je me demandais comment ajouter des espaces réservés de propriété dans .yml des dossiers. J'ai trouvé un exemple précis mais je ne sais pas où sont les espaces réservés de propriété dans lesquels est instanciée. Est-ce dans les variables système d'env, un fichier, etc.?

Bootstrap.yml

spring:
  cloud:
    config:
      username: ${my.stored.files.username}
      password: ${my.stored.files.password}
      label: ${spring.cloud.find.label}
      uri: ${spring.cloud.config.uri}
      enabled: false
      failFast: true

L'utilisateur utilise des espaces réservés de propriété, mais où l'utilisateur l'a-t-il déclaré? D'où ce .yml lit-il les valeurs? (même question que ci-dessus) Existe-t-il un document expliquant la connexion?

Cette application Web sera poussée vers la fonderie de cloud en utilisant "cf Push", qui choisira automatiquement le fichier manifest.yml à configurer. Si possible, un exemple de fonderie cloud serait formidable.

Comprendre/Exemple de fichier Application.properties

app.name=MyApp
app.description=${app.name} 

L'utilisateur a pu utiliser $ {app.name} car il est défini. Je suis confus sur l'exemple ci-dessus. Comment et où l'utilisateur obtient-il "$ {my.stored.files.username}. Où est-ce défini? J'ai supposé que ce serait dans system.properties ou dans les variables d'environnement. Quelqu'un peut-il confirmer?

8
Jesse

Après des recherches intensives, j'ai pu constater que lorsque j'utilise des espaces réservés dans des fichiers .yml, il lit les valeurs des variables d'environnement. Cela faisait partie de ma théorie au début, mais personne ne l'a confirmé.

Réponse

spring:
  cloud:
    config:
      username: ${my.stored.files.username}
      password: ${my.stored.files.password}
      label: ${spring.cloud.find.label}
      uri: ${spring.cloud.config.uri}
      enabled: false
      failFast: true

* Dans les variables d'environnement *

Image as example

set key as: my.stored.files.username
set value as: UsernameSample

Puis

Lorsque vous exécutez l'application, yml se lira comme ça.

    config:
      username: ${my.stored.files.username}
                //gets replaced with UsernameSample

C'est le lien qui a résolu mon problème link

15
Jesse

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

SpringApplication charge les propriétés des fichiers application.properties aux emplacements suivants et les ajoute à l'environnement Spring:

  • Un sous-répertoire/config du répertoire courant
  • Le répertoire courant
  • Un package classpath/config
  • La racine du chemin de classe

La liste est classée par ordre de priorité (les propriétés définies dans les emplacements supérieurs de la liste remplacent celles définies dans les emplacements inférieurs).

Vous pouvez également utiliser des fichiers YAML ('.yml') comme alternative à '.properties'.

Si vous n'aimez pas application.properties comme nom de fichier de configuration, vous pouvez basculer vers un autre nom de fichier en spécifiant une propriété d'environnement spring.config.name. Vous pouvez également faire référence à un emplacement explicite à l'aide de la propriété d'environnement spring.config.location (qui est une liste séparée par des virgules d'emplacements de répertoire ou de chemins de fichier). L'exemple suivant montre comment spécifier un nom de fichier différent:

 $ Java -jar myproject.jar --spring.config.name=myproject

L'exemple suivant montre comment spécifier deux emplacements:

$ Java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

spring.config.name et spring.config.location sont utilisés très tôt pour déterminer quels fichiers doivent être chargés. Ils doivent être définis comme une propriété d'environnement (généralement une variable d'environnement du système d'exploitation, une propriété système ou un argument de ligne de commande).

Si spring.config.location contient des répertoires (par opposition aux fichiers), ils doivent se terminer par/(et, à l'exécution, être ajoutés aux noms générés à partir de spring.config.name avant d'être chargés, y compris les noms de fichiers spécifiques au profil). Les fichiers spécifiés dans spring.config.location sont utilisés tels quels, sans prise en charge des variantes spécifiques au profil, et sont remplacés par les propriétés spécifiques au profil.

Les emplacements de configuration sont recherchés dans l'ordre inverse. Par défaut, les emplacements configurés sont classpath: /, classpath:/config /, file: ./, file: ./ config /. L'ordre de recherche résultant est le suivant:

  • file:./config/
  • file:./
  • classpath:/config/
  • classpath:/

Lorsque les emplacements de configuration personnalisés sont configurés à l'aide de spring.config.location, ils remplacent les emplacements par défaut. Par exemple, si spring.config.location est configuré avec la valeur classpath:/custom-config /, file: ./ custom-config /, l'ordre de recherche devient le suivant:

  • file:./custom-config/
  • classpath:custom-config/

Alternativement, lorsque les emplacements de configuration personnalisés sont configurés à l'aide de spring.config.additional-location, ils sont utilisés en plus des emplacements par défaut. Les emplacements supplémentaires sont recherchés avant les emplacements par défaut. Par exemple, si des emplacements supplémentaires de classpath:/custom-config /, file: ./ custom-config/sont configurés, l'ordre de recherche devient le suivant:

  • file:./custom-config/
  • classpath:custom-config/
  • file:./config/
  • file:./
  • classpath:/config/
  • classpath:/

Cet ordre de recherche vous permet de spécifier des valeurs par défaut dans un fichier de configuration, puis de remplacer ces valeurs de manière sélective dans un autre. Vous pouvez fournir des valeurs par défaut pour votre application dans application.properties (ou tout autre nom de base que vous choisissez avec spring.config.name) dans l'un des emplacements par défaut. Ces valeurs par défaut peuvent ensuite être remplacées lors de l'exécution avec un fichier différent situé dans l'un des emplacements personnalisés.

0
gavenkoa