Réponses:
Je viens de demander aux Spring Cloud
gars et j'ai pensé 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 éléments suivants:
spring.application.name
et à l' spring.cloud.config.server.git.uri
intérieurbootstrap.yml
encryption/decryption
informationsTechniquement, bootstrap.yml
est chargé par un parent parent ApplicationContext
. Ce parent ApplicationContext
est chargé avant celui qui l'utilise application.yml
.
bootstrap.yml
?
bootstrap.yml
ou bootstrap.properties
Il n'est utilisé / nécessaire que si vous utilisez Spring Cloud et que 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 la sortie de la boîte, il est responsable du chargement des propriétés de configuration à partir des sources externes , ainsi que du décryptage des propriétés dans les fichiers de configuration externes locaux.
Notez que le bootstrap.yml
ou bootstrap.properties
peut contenir une configuration supplémentaire (par exemple par défaut) mais généralement vous n'avez qu'à mettre ici la configuration de démarrage.
Il contient généralement deux propriétés:
spring.cloud.config.uri
)spring.application.name
)Au démarrage, Spring Cloud fait un appel HTTP au serveur de configuration avec le nom de l'application et récupère la configuration de cette application.
application.yml
ou application.properties
Contient la configuration d'application standard - généralement la configuration par défaut car toute configuration récupérée pendant le processus d'amorçage remplacera la configuration définie ici.
Cette réponse a été très joliment expliquée dans le livre " Microservices Interview Questions, For Java Developers (Spring Boot, Spring Cloud, Cloud Native Applications)" par Munish Chandel , Version 1.30, 25.03.2018.
Le contenu suivant a été 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 Spring Boot. À moins que vous ne changiez 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 n'importe quel projet Spring Boot se trouvent à l' adresse : https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Vous pouvez personnaliser ces propriétés comme selon vos besoins d'application. Un exemple de fichier est présenté ci-dessous:
spring:
application:
name: foobar
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
bootstrap.yml
bootstrap.yml d'autre part est spécifique à spring-cloud-config et est chargé avant le fichier 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 sur 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 effectue un appel HTTP (S) vers le serveur de configuration Spring Cloud 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 récupérée (à partir du serveur cloud config) pendant le processus d'amorçage 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
Au démarrage de l'application, il essaie de récupérer la configuration du service en se connectant à http: // localhost: 8888 et examine Calculation-service.properties présent dans 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
Eh bien, je suis totalement d'accord avec les réponses qui existent déjà sur ce point:
bootstrap.yml
est utilisé pour enregistrer les paramètres qui indiquent où se trouve la configuration à distance et le contexte d'application Bootstrap est créé avec ces configurations à distance.En fait, il est également capable de stocker des propriétés normales tout comme quoi application.yml
. Mais faites attention à cette chose délicate:
bootstrap.yml
, elles auront une priorité inférieure à presque toutes les autres sources de propriété, 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), et les propriétés que nous obtenons de cette manière ont une priorité élevée, de sorte qu'elles ne peuvent pas être remplacées par la configuration locale. Comme décrit ici .bootstrap.yml
. Comme expliqué précédemment, ils auront une priorité plus faible. Utilisez-les pour définir les valeurs par défaut, peut-être une bonne idée.Ainsi, les différences entre mettre une propriété sur application.yml
ou bootstrap.yml
dans une botte de printemps sont:
bootstrap.yml
.application.yml
aura une priorité plus élevée.Bootstrap.yml est utilisé pour récupérer la configuration du serveur. Cela peut être pour une application cloud Spring ou pour d'autres. Il ressemble généralement à:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
Lorsque nous démarrons l'application, il essaie de se connecter au serveur donné et de lire la configuration basée sur le profil Spring mentionné dans la configuration run / debug.
Si le serveur est inaccessible, l'application peut même ne pas pouvoir continuer. Cependant, si des configurations correspondant au profil sont présentes localement, les configurations de serveur sont remplacées.
Bonne approche:
Gérez un profil distinct pour le local et exécutez l'application à l'aide de différents profils.
Une autre utilisation de bootstrap.yml est de charger la configuration à partir de kubernetes configmap et de ressources secrètes . L'application doit importer la dépendance Spring-Cloud-Starter-Kubernetes .
Comme pour Spring Cloud Config, cela doit avoir lieu pendant la phrase d'amorçage.
De la documentation:
spring:
application:
name: cloud-k8s-app
cloud:
kubernetes:
config:
name: default-name
namespace: default-namespace
sources:
# Spring Cloud Kubernetes looks up a ConfigMap named c1 in namespace default-namespace
- name: c1
Ainsi, les propriétés stockées dans la ressource configmap avec meta.name default-name peuvent être référencées de la même manière que les propriétés dans application.yml
Et le même processus s'applique aux secrets:
spring:
application:
name: cloud-k8s-app
cloud:
kubernetes:
secrets:
name: default-name
namespace: default-namespace
sources:
# Spring Cloud Kubernetes looks up a Secret named s1 in namespace default-namespace
- name: s1
Bootstrap.yml est le premier fichier chargé au démarrage de l'application de démarrage printanier et application.property est chargé au démarrage de l'application. Ainsi, vous conservez, peut-être les informations d'identification de votre serveur de configuration, etc., dans bootstrap.yml qui est requis lors du chargement de l'application, puis dans application.properties que vous conservez peut être l'URL de la base de données, etc.
bootstrap.yml
est autant que je peux voir spécifique à [spring-cloud-config
] ( cloud.spring.io/spring-cloud-config/… )) et c'est la configuration utilisée pour trouver la bonne configuration. Donc, la configuration est probablement chargée avant application.properties/yaml