¿Cuál es la diferencia entre poner una propiedad en application.yml o bootstrap.yml en Spring Boot?
¿Cuál es la diferencia entre poner una propiedad en application.yml o bootstrap.yml en Spring Boot? En el caso de logging.config, la aplicación funciona de manera diferente.
Acabo de preguntarles a los Spring Cloud
chicos y pensé que debería compartir la información que tengo aquí.
bootstrap.yml
se carga antes application.yml
.
Normalmente se utiliza para lo siguiente:
- cuando utilice Spring Cloud Config Server, debe especificar
spring.application.name
yspring.cloud.config.server.git.uri
dentrobootstrap.yml
- alguna
encryption/decryption
información
Técnicamente, bootstrap.yml
lo carga un Spring padre ApplicationContext
. Ese padre ApplicationContext
se carga antes que el que usa application.yml
.
bootstrap.yml
obootstrap.properties
Solo se usa/necesita si está usando Spring Cloud y la configuración de su aplicación está almacenada en un servidor de configuración remoto (por ejemplo, Spring Cloud Config Server).
De la documentación:
Una aplicación Spring Cloud funciona creando un contexto "arranque", que es un contexto principal para la aplicación principal. De fábrica, es responsable de cargar las propiedades de configuración desde las fuentes externas y también de descifrar las propiedades en los archivos de configuración externos locales.
Tenga en cuenta que bootstrap.yml
o bootstrap.properties
puede contener configuraciones adicionales (por ejemplo, valores predeterminados), pero generalmente solo necesita colocar la configuración de arranque aquí.
Normalmente contiene dos propiedades:
- ubicación del servidor de configuración (
spring.cloud.config.uri
) - nombre de la aplicación (
spring.application.name
)
Al iniciarse, Spring Cloud realiza una llamada HTTP al servidor de configuración con el nombre de la aplicación y recupera la configuración de esa aplicación.
application.yml
oapplication.properties
Contiene la configuración de aplicación estándar: normalmente la configuración predeterminada, ya que cualquier configuración recuperada durante el proceso de arranque anulará la configuración definida aquí.
Esta respuesta se ha explicado muy bien en el libro " Preguntas de la entrevista sobre microservicios, para desarrolladores de Java (Spring Boot, Spring Cloud, aplicaciones nativas de la nube) de Munish Chandel , versión 1.30, 25.03.2018.
El siguiente contenido ha sido tomado de este libro y el crédito total por esta respuesta es para el autor del libro, es decir, Munish Chandel.
aplicación.yml
El archivo application.yml/application.properties es específico de las aplicaciones Spring Boot. A menos que cambie la ubicación de las propiedades externas de una aplicación, Spring Boot siempre cargará application.yml desde la siguiente ubicación:
/src/main/resources/application.yml
Puede almacenar todas las propiedades externas de su aplicación en este archivo. Las propiedades comunes que están disponibles en cualquier proyecto Spring Boot se pueden encontrar en: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Puede personalizar estas propiedades como según las necesidades de su aplicación. El archivo de muestra se muestra a continuación:
spring:
application:
name: foobar
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
arranque.yml
bootstrap.yml, por otro lado, es específico de spring-cloud-config y se carga antes que application.yml.
bootstrap.yml solo es necesario si está utilizando Spring Cloud y la configuración de su microservicio está almacenada en un Spring Cloud Config Server remoto.
Puntos importantes sobre bootstrap.yml
- Cuando se utiliza con el servidor Spring Cloud Config, deberá especificar el nombre de la aplicación y la ubicación del git de configuración utilizando las siguientes propiedades.
spring.application.name: "nombre-aplicación" spring.cloud.config.server.git.uri: "git-uri-config"
- Cuando se usa con microservicios (que no sean el servidor de configuración de la nube), debemos especificar el nombre de la aplicación y la ubicación del servidor de configuración usando las siguientes propiedades
nombre.de.aplicación.de.primavera: spring.cloud.config.uri:
- Este archivo de propiedades puede contener otra configuración relevante para el entorno Spring Cloud, por ejemplo, la ubicación del servidor eureka y propiedades relacionadas con el cifrado/descifrado.
Al iniciarse, Spring Cloud realiza una llamada HTTP(S) al servidor de configuración de Spring Cloud con el nombre de la aplicación y recupera la configuración de esa aplicación.
application.yml contiene la configuración predeterminada para el microservicio y cualquier configuración recuperada (del servidor de configuración de la nube) durante el proceso de arranque anulará la configuración definida en application.yml.
Bueno, estoy totalmente de acuerdo con las respuestas que ya existen sobre este punto:
bootstrap.yml
se utiliza para guardar parámetros que señalan dónde está la configuración remota y se crea el contexto de la aplicación Bootstrap con esta configuración remota.
En realidad, también es capaz de almacenar propiedades normales de la misma manera que lo application.yml
hace. Pero presta atención a esto complicado:
- Si coloca propiedades en
bootstrap.yml
, tendrán menor prioridad que casi cualquier otra fuente de propiedades, incluido application.yml. Como se describe aquí .
Dejemos claro que existen dos tipos de propiedades relacionadas con bootstrap.yml
:
- Propiedades que se cargan durante la fase de arranque. Solemos
bootstrap.yml
encontrar el titular de las propiedades (un sistema de archivos, un repositorio git u otra cosa), y las propiedades que obtenemos de esta manera tienen alta prioridad, por lo que no pueden ser anuladas por la configuración local. Como se describe aquí . - Propiedades que están en el
bootstrap.yml
. Como se explicó anteriormente, tendrán menor prioridad. Utilícelos para establecer valores predeterminados, tal vez sea una buena idea.
Entonces, las diferencias entre poner una propiedad en Spring Boot application.yml
o bootstrap.yml
en Spring Boot son:
- Las propiedades para cargar archivos de configuración en la fase de arranque solo se pueden colocar en formato
bootstrap.yml
. - En cuanto a todos los demás tipos de propiedades, colocarlas
application.yml
tendrá mayor prioridad.