Respuestas:
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 usa para lo siguiente:
spring.application.name
y spring.cloud.config.server.git.uri
dentrobootstrap.yml
encryption/decryption
informacionTécnicamente, bootstrap.yml
es cargado por un padre Spring ApplicationContext
. Ese padre ApplicationContext
se carga antes que el que usa application.yml
.
bootstrap.yml
?
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.yml
o 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:
spring.cloud.config.uri
)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í.
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
spring.application.name: "nombre-aplicación" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
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
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
Bueno, estoy totalmente de acuerdo con las respuestas que ya existen sobre este punto:
bootstrap.yml
se 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.yml
hace. Pero presta atención a esta cosa difícil:
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
:
bootstrap.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í .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.yml
en el arranque de primavera son:
bootstrap.yml
.application.yml
tendrá mayor prioridad.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.
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.
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
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.
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