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.
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:
spring.application.name
et spring.cloud.config.server.git.uri
dans bootstrap.yml
encryption/decryption
Techniquement, bootstrap.yml
est chargé par un ressort Spring ApplicationContext
. Ce parent ApplicationContext
est chargé avant celui qui utilise application.yml
.
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:
spring.cloud.config.uri
)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.
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
spring.application.name: "nom-application" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
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 .
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
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.
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.
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:
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
:
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 .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:
bootstrap.yml
.application.yml
aura une priorité plus élevée.