web-dev-qa-db-fra.com

Quelle est la différence entre mettre une propriété sur application.yml ou bootstrap.yml dans spring boot?

Quelle est la différence entre mettre une propriété sur application.yml ou bootstrap.yml dans spring boot? Dans le cas de logging.config, l'application fonctionne différemment.

188
Rys

Je viens de demander aux gars Spring Cloud et je pensais que je devrais partager les informations que j'ai ici.

bootstrap.yml est chargé avant application.yml.

Il est généralement utilisé pour les tâches suivantes:

  • lorsque vous utilisez Spring Cloud Config Server, vous devez spécifier spring.application.name et spring.cloud.config.server.git.uri dans bootstrap.yml
  • quelques informations encryption/decryption

Techniquement, bootstrap.yml est chargé par un ressort Spring ApplicationContext. Ce parent ApplicationContext est chargé avant celui qui utilise application.yml.

233
Michael Isvy

bootstrap.yml ou bootstrap.properties

Il est utilisé/nécessaire uniquement si vous utilisez Spring Cloud et la configuration de votre application est stockée sur un serveur de configuration distant (par exemple, Spring Cloud Config Server).

De la documentation:

Une application Spring Cloud fonctionne en créant un contexte "bootstrap", qui est un contexte parent pour l'application principale. Dès l'installation, il est responsable du chargement des propriétés de configuration à partir des sources externes , ainsi que du déchiffrement des propriétés dans la configuration externe locale. des dossiers.

Notez que le bootstrap.yml ou bootstrap.properties peut contenir une configuration supplémentaire (par exemple, des valeurs par défaut), mais il suffit généralement de mettre bootstrap config ici.

Il contient généralement deux propriétés:

  • emplacement du serveur de configuration (spring.cloud.config.uri)
  • nom de l'application (spring.application.name)

Au démarrage, Spring Cloud appelle le serveur de configuration avec le nom HTTP de l'application et récupère la configuration de cette application.

application.yml ou application.properties

Contient la configuration standard de l'application - généralement la configuration par défaut, car toute configuration extraite au cours du processus bootstrap remplacera la configuration définie ici.

68
dustin.schultz

Cette réponse a été très bien expliquée dans le livre " Questions sur les entretiens avec Microservices, Pour Java Développeurs (Spring Boot, Spring Cloud, Applications natives en nuage) de Munish Chandel , version 1.30, 25.03.2018.

Le contenu suivant est tiré de ce livre et le crédit total pour cette réponse va à l'auteur du livre, c'est-à-dire Munish Chandel

application.yml

Le fichier application.yml/application.properties est spécifique aux applications de démarrage Spring. Si vous ne modifiez pas l'emplacement des propriétés externes d'une application, Spring Boot chargera toujours application.yml à partir de l'emplacement suivant:

/src/main/resources/application.yml

Vous pouvez stocker toutes les propriétés externes de votre application dans ce fichier. Les propriétés communes disponibles dans tout projet Spring Boot sont disponibles à l’adresse suivante: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html = Vous pouvez personnaliser ces propriétés selon les besoins de votre application. Un exemple de fichier est présenté ci-dessous:

spring: application: nom: foobar source de données: driverClassName: com.mysql.jdbc. URL du pilote: jdbc: mysql: // localhost/serveur de test: port: 9000

bootstrap.yml

bootstrap.yml est en revanche spécifique à spring-cloud-config et est chargé avant le application.yml

bootstrap.yml n'est nécessaire que si vous utilisez Spring Cloud et que votre configuration de microservice est stockée sur un serveur Spring Cloud Config Server distant.

Points importants à propos de bootstrap.yml

  1. Lorsqu'il est utilisé avec le serveur Spring Cloud Config, vous devez spécifier le nom de l'application et l'emplacement de configuration en utilisant les propriétés ci-dessous.
 
 spring.application.name: "nom-application" 
 spring.cloud.config.server.git.uri: "git-uri-config" 
 
  1. Lorsqu'il est utilisé avec des microservices (autres que le serveur de configuration cloud), nous devons spécifier le nom de l'application et l'emplacement du serveur de configuration à l'aide des propriétés ci-dessous.
 
 spring.application.name: 
 spring.cloud.config.uri: 
  1. Ce fichier de propriétés peut contenir une autre configuration pertinente pour l'environnement Spring Cloud, par exemple. Emplacement du serveur eureka, propriétés liées au cryptage/décryptage.

Au démarrage, Spring Cloud passe un appel HTTP (S) au serveur Spring Cloud Config avec le nom de l’application et récupère la configuration de cette application.

application.yml contient la configuration par défaut du microservice et toute configuration extraite (du serveur de configuration dans le cloud) au cours du processus bootstrap remplacera la configuration définie dans application.yml .

14
Vaibhav Sharma

Juste mes 2 cents ici ..

Bootstrap.yml ou Bootstrap.properties est utilisé pour récupérer la configuration à partir de Spring Cloud Server.

Par exemple, dans mon fichier Bootstrap.properties, j'ai la configuration suivante

spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888

Lors du démarrage de l'application, le système essaie d'extraire la configuration du service en se connectant à http: // localhost: 8888 et en regardant Calculation-service.properties présent sur le serveur Spring Cloud Config.

Vous pouvez valider la même chose à partir des journaux de Calcuation-Service lorsque vous le démarrez

INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888

2
dixit gangaiah

Bootstrap.yml est utilisé pour extraire la configuration du serveur. Cela peut être pour une application cloud Spring ou pour d’autres. Typiquement cela ressemble à:

spring:
  application:
    name: "app-name"
  cloud:
    config:
      uri: ${config.server:http://some-server-where-config-resides}

Lorsque nous démarrons l’application, elle essaie de se connecter au serveur en question et de lire la configuration en fonction du profil de ressort mentionné dans la configuration d’exécution/de débogage. bootstrap.yml loads the first

Si le serveur est inaccessible, l'application risque même de ne plus pouvoir continuer. Toutefois, si des configurations correspondant au profil sont présentes localement, les configurations de serveur sont remplacées.

Bonne approche:

Maintenir un profil distinct pour local et exécuter l'application à l'aide de différents profils.

2
Sudip Bhandari

Eh bien, je suis tout à fait d’accord avec les réponses existantes sur ce point:

  • bootstrap.yml est utilisé pour enregistrer les paramètres indiquant l'emplacement de la configuration distante et où le contexte de l'application d'amorçage est créé avec cette configuration distante.

En fait, il est également capable de stocker les propriétés normales de la même manière que ce que application.yml fait. Mais faites attention à cette chose délicate:

  • Si vous placez des propriétés dans bootstrap.yml, leur priorité sera inférieure à celle de presque toutes les autres sources de propriétés, y compris application.yml. Comme décrit ici .

Soyons clairs, il existe deux types de propriétés liées à bootstrap.yml:

  • Propriétés chargées au cours de la phase bootstrap. Nous utilisons bootstrap.yml pour trouver le détenteur des propriétés (un système de fichiers, un référentiel git ou autre chose), et les propriétés ainsi obtenues ont une priorité élevée, elles ne peuvent donc pas être remplacées par la configuration locale. Comme décrit ici .
  • Propriétés qui se trouvent dans le bootstrap.yml. Comme expliqué plus tôt, ils auront une priorité inférieure. Utilisez-les pour définir les valeurs par défaut peut-être une bonne idée.

Ainsi, les différences entre le fait de placer une propriété sur application.yml ou bootstrap.yml au démarrage du printemps sont les suivantes:

  • Les propriétés de chargement des fichiers de configuration dans la phase bootstrap ne peuvent être placées que dans bootstrap.yml.
  • Comme pour tous les autres types de propriétés, placez-les dans application.yml aura une priorité plus élevée.
0
Lebecca