¿Cuál es la diferencia entre poner una propiedad en application.yml o bootstrap.yml en el arranque de primavera?

251

¿Cuál es la diferencia entre poner una propiedad en application.yml o bootstrap.yml en el arranque de primavera? En el caso logging.config, la aplicación funciona de manera diferente.

Rys
fuente
14
bootstrap.yml es, por lo que puedo ver, específico para [ spring-cloud-config] ( cloud.spring.io/spring-cloud-config/… )) y es la configuración utilizada para encontrar la configuración correcta. Entonces config probablemente esté cargado antes de application.properties/yaml
zapl

Respuestas:

297

Acabo de preguntarles a los Spring Cloudchicos y pensé que debería compartir la información que tengo aquí.

bootstrap.ymlse carga antes application.yml.

Normalmente se usa para lo siguiente:

  • cuando use Spring Cloud Config Server, debe especificar spring.application.namey spring.cloud.config.server.git.uridentrobootstrap.yml
  • alguna encryption/decryptioninformacion

Técnicamente, bootstrap.ymles cargado por un padre Spring ApplicationContext. Ese padre ApplicationContextse carga antes que el que usa application.yml.

Michael Isvy
fuente
66
¿Podría explicar por qué Config Server necesita poner estos parámetros bootstrap.yml?
Neo
31
Cuando se usa Spring Cloud, los datos de configuración 'reales' generalmente se cargan desde un servidor. Para obtener la URL (y otra configuración de conexión, como contraseñas, etc.), necesita una configuración anterior o "bootstrap". Por lo tanto, coloca los atributos del servidor de configuración en bootstrap.yml, que se usa para cargar los datos de configuración reales (que generalmente anula lo que hay en una aplicación.yml [si está presente]).
Mike Mansell
10
a veces me pregunto cuándo la primavera trae nuevas características emocionantes, deja atrás la convención sobre la especificación o asumen que ya es una convención y no es necesario especificar nada y todo se resolverá por sí solo si no es por la primavera, entonces la primavera arranca y puede estar en la primavera futura. boot-boot;)
Saurabh
Cuando dices bootstrap.yml se carga antes de application.yml. Pero cuando elimino application.yml. Mi aplicación no lee bootstrap.yml. ¿Porqué es eso?
Jesse
Debemos resaltar que el archivo bootstrap nunca se anula porque tiene más prioridad. De acuerdo con la documentación de la primavera del equipo
kelgwiin
84

bootstrap.yml o bootstrap.properties

Solo se usa / necesita si está usando Spring Cloud y la configuración de su aplicación se almacena en un servidor de configuración remota (por ejemplo, Spring Cloud Config Server).

De la documentación:

Una aplicación Spring Cloud funciona creando un contexto "bootstrap", que es un contexto principal para la aplicación principal. Fuera de la caja, es responsable de cargar las propiedades de configuración de las fuentes externas y también de descifrar las propiedades en los archivos de configuración externos locales.

Tenga en cuenta que bootstrap.ymlo bootstrap.properties puede contener una configuración adicional (por ejemplo, valores predeterminados), pero generalmente solo necesita poner la configuración de arranque aquí.

Por lo general, 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 o application.properties

Contiene la configuración estándar de la aplicación, generalmente la configuración predeterminada, ya que cualquier configuración recuperada durante el proceso de arranque anulará la configuración definida aquí.

dustin.schultz
fuente
34

Esta respuesta ha sido muy bien explicada en el libro " Preguntas de la entrevista de microservicios, para desarrolladores de Java (Spring Boot, Spring Cloud, Cloud Native Applications) 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

application.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 para 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 sus necesidades de 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

bootstrap.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 su configuración de microservicio se almacena en un servidor de configuración de Spring Cloud remoto.

Puntos importantes sobre bootstrap.yml

  1. Cuando se utiliza con el servidor Spring Cloud Config, deberá especificar el nombre de la aplicación y la ubicación de configuración de git utilizando las propiedades a continuación.
spring.application.name: "nombre-aplicación"
spring.cloud.config.server.git.uri: "git-uri-config"

  1. Cuando se usa con microservicios (que no sean el servidor de configuración de la nube), necesitamos especificar el nombre de la aplicación y la ubicación del servidor de configuración usando las propiedades a continuación
spring.application.name: 
spring.cloud.config.uri: 
  1. Este archivo de propiedades puede contener otra configuración relevante para el entorno de Spring Cloud, por ejemplo, ubicación del servidor eureka, 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

Vaibhav Sharma
fuente
5

Solo mis 2 centavos aquí ...

Bootstrap.yml o Bootstrap.properties se utilizan para recuperar la configuración de Spring Cloud Server.

Por ejemplo, en el archivo My Bootstrap.properties tengo la siguiente configuración

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

Al iniciar la aplicación, intenta obtener la configuración del servicio conectándose a http: // localhost: 8888 y examina Calculation-service.properties presente en el servidor Spring Cloud Config

Puede validar lo mismo de los registros de Calcuation-Service cuando lo inicia

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

dixit gangaiah
fuente
4

Bueno, estoy totalmente de acuerdo con las respuestas que ya existen sobre este punto:

  • bootstrap.ymlse usa para guardar parámetros que indican dónde está la configuración remota y se crea el contexto de aplicación Bootstrap con estas configuraciones remotas.

En realidad, también puede almacenar propiedades normales de la misma manera que lo application.ymlhace. Pero presta atención a esta cosa difícil:

  • Si coloca propiedades en bootstrap.yml , tendrán menos prioridad que casi cualquier otra fuente de propiedades, incluida application.yml. Como se describe aquí .

Aclaremos, hay dos tipos de propiedades relacionadas con bootstrap.yml:

  • Propiedades que se cargan durante la fase de arranque. Usamosbootstrap.yml para 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 una 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, obtendrán menor prioridad. Úselos para establecer valores predeterminados, tal vez sea una buena idea.

Entonces, las diferencias entre poner una propiedad en application.yml o bootstrap.ymlen el arranque de primavera son:

  • Las propiedades para cargar archivos de configuración en la fase de arranque solo se pueden colocar en bootstrap.yml .
  • Como para todos los demás tipos de propiedades, colocarlas application.ymltendrá mayor prioridad.
Lebecca
fuente
3

Bootstrap.yml se usa para obtener la configuración del servidor. Puede ser para una aplicación en la nube de Spring o para otros. Por lo general, se ve así:

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

Cuando iniciamos la aplicación, intenta conectarse al servidor dado y leer la configuración basada en el perfil de resorte mencionado en la configuración de ejecución / depuración. bootstrap.yml carga el primero

Si no se puede acceder al servidor, es posible que la aplicación no pueda continuar. Sin embargo, si las configuraciones que coinciden con el perfil están presentes localmente, las configuraciones del servidor se anulan.

Buen enfoque:

Mantenga un perfil separado para local y ejecute la aplicación usando diferentes perfiles.

Sudip Bhandari
fuente
1

Otro uso para bootstrap.yml es cargar la configuración desde el mapa de configuración de kubernetes y los recursos secretos . La aplicación debe importar la dependencia spring-cloud-starter-kubernetes .

Al igual que con Spring Cloud Config, esto tiene que tener lugar durante la frase de arranque.

De los documentos:

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

Por lo tanto, las propiedades almacenadas en el recurso de mapa de configuración con meta.name default-name se pueden referenciar de la misma manera que las propiedades en application.yml

Y el mismo proceso se aplica a los secretos:

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
Jack Beaken
fuente
0

Bootstrap.yml es el primer archivo cargado cuando inicia la aplicación Spring Boot y application.property se carga cuando se inicia la aplicación. Por lo tanto, debe mantener las credenciales de su servidor de configuración, etc., en bootstrap.yml, que se requiere durante la carga de la aplicación y luego en application.properties que guarda, puede ser la URL de la base de datos, etc.

Anwar Sir
fuente