Respostas:
Acabei de perguntar aos Spring Cloud
caras e pensei em compartilhar as informações que tenho aqui.
bootstrap.yml
é carregado antes application.yml
.
É normalmente usado para o seguinte:
spring.application.name
e spring.cloud.config.server.git.uri
dentrobootstrap.yml
encryption/decryption
informaçãoTecnicamente, bootstrap.yml
é carregado por um pai Spring ApplicationContext
. Esse pai ApplicationContext
é carregado antes daquele que usa application.yml
.
bootstrap.yml
?
bootstrap.yml
ou bootstrap.properties
Ele é usado / necessário apenas se você estiver usando o Spring Cloud e a configuração do seu aplicativo estiver armazenada em um servidor de configuração remota (por exemplo, Spring Cloud Config Server).
A partir da documentação:
Um aplicativo Spring Cloud opera criando um contexto de "inicialização", que é um contexto pai para o aplicativo principal. Fora da caixa, ele é responsável por carregar as propriedades de configuração das fontes externas e também descriptografar as propriedades nos arquivos de configuração externos locais.
Observe que o bootstrap.yml
ou bootstrap.properties
pode conter configuração adicional (por exemplo, padrões), mas geralmente você só precisa colocar a configuração de autoinicialização aqui.
Normalmente, ele contém duas propriedades:
spring.cloud.config.uri
)spring.application.name
)Na inicialização, o Spring Cloud faz uma chamada HTTP para o servidor de configuração com o nome do aplicativo e recupera novamente a configuração desse aplicativo.
application.yml
ou application.properties
Contém a configuração padrão do aplicativo - normalmente a configuração padrão, pois qualquer configuração recuperada durante o processo de inicialização substituirá a configuração definida aqui.
Esta resposta foi muito bem explicada no livro " Perguntas sobre entrevista de microsserviços, para desenvolvedores Java (Spring Boot, Spring Cloud, aplicativos nativos em nuvem) por Munish Chandel , versão 1.30, 25.03.2018.
O conteúdo a seguir foi retirado deste livro, e o crédito total para esta resposta é do autor do livro, ou seja, Munish Chandel
application.yml
O arquivo application.yml / application.properties é específico para aplicativos Spring Boot. A menos que você altere o local das propriedades externas de um aplicativo, a inicialização por mola sempre carregará application.yml no seguinte local:
/src/main/resources/application.yml
Você pode armazenar todas as propriedades externas para seu aplicativo neste arquivo. As propriedades comuns disponíveis em qualquer projeto Spring Boot podem ser encontradas em: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Você pode personalizar essas propriedades como de acordo com as necessidades do seu aplicativo. O arquivo de amostra é mostrado abaixo:
spring:
application:
name: foobar
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
bootstrap.yml
O bootstrap.yml, por outro lado, é específico da spring-cloud-config e é carregado antes do application.yml
O bootstrap.yml será necessário apenas se você estiver usando o Spring Cloud e sua configuração de microsserviço estiver armazenada em um servidor remoto do Spring Cloud Config.
Pontos importantes sobre o bootstrap.yml
spring.application.name: "application-name" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
Na inicialização, o Spring Cloud faz uma chamada HTTP (S) para o Spring Cloud Config Server com o nome do aplicativo e recupera novamente a configuração desse aplicativo.
application.yml contém a configuração padrão para o microsserviço e qualquer configuração recuperada (do servidor de configuração em nuvem) durante o processo de inicialização substituirá a configuração definida em application.yml
Apenas meus 2 centavos aqui ..
Bootstrap.yml ou Bootstrap.properties é usado para buscar a configuração do Spring Cloud Server.
Por exemplo, no arquivo My Bootstrap.properties, tenho o seguinte Config
spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888
Ao iniciar o aplicativo, ele tenta buscar a configuração do serviço conectando-se a http: // localhost: 8888 e consulta Calculation-service.properties presente no servidor Spring Cloud Config
Você pode validar o mesmo nos logs do Calcuation-Service ao iniciá-lo
INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
Bem, concordo totalmente com as respostas já existentes neste ponto:
bootstrap.yml
é usado para salvar parâmetros que apontam onde está a configuração remota e o Contexto do aplicativo Bootstrap é criado com essas configurações remotas.Na verdade, ele também é capaz de armazenar propriedades normais da mesma forma que o que application.yml
faz. Mas preste atenção nesta coisa complicada:
bootstrap.yml
, elas terão uma precedência menor do que quase qualquer outra fonte de propriedades, incluindo application.yml. Como descrito aqui .Vamos deixar claro, existem dois tipos de propriedades relacionadas a bootstrap.yml
:
bootstrap.yml
para encontrar o detentor das propriedades (um sistema de arquivos, repositório git ou algo mais), e as propriedades que obtemos dessa maneira são de alta precedência, portanto elas não podem ser substituídas pela configuração local. Como descrito aqui .bootstrap.yml
. Como explicado anteriormente, eles terão menor precedência. Use-os para definir os padrões, talvez uma boa ideia.Portanto, as diferenças entre colocar uma propriedade na inicialização application.yml
ou bootstrap.yml
na primavera são:
bootstrap.yml
.application.yml
maior prioridade.Bootstrap.yml é usado para buscar a configuração do servidor. Pode ser para um aplicativo em nuvem Spring ou para outros. Normalmente, parece com:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
Quando iniciamos o aplicativo, ele tenta se conectar ao servidor especificado e ler a configuração com base no perfil de primavera mencionado na configuração de execução / depuração.
Se o servidor estiver inacessível, o aplicativo poderá não conseguir prosseguir. No entanto, se configurações correspondentes ao perfil estiverem presentes localmente, as configurações do servidor serão substituídas.
Boa abordagem:
Mantenha um perfil separado para local e execute o aplicativo usando perfis diferentes.
Outro uso do bootstrap.yml é carregar a configuração do kubernetes configmap e recursos secretos . O aplicativo deve importar a dependência spring-cloud-starter-kubernetes .
Assim como no Spring Cloud Config, isso deve ocorrer durante a frase de inicialização.
Dos 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
Portanto, as propriedades armazenadas no recurso configmap com meta.name default-name podem ser referenciadas da mesma forma que as propriedades em application.yml
E o mesmo processo se aplica aos segredos:
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 é o primeiro arquivo carregado quando você inicia o aplicativo de inicialização da primavera e application.property é carregado quando o aplicativo é iniciado. Portanto, você deve manter as credenciais do servidor de configuração, etc., em bootstrap.yml, necessário durante o carregamento do aplicativo e, em application.properties, o URL do banco de dados, etc.
bootstrap.yml
é o máximo que posso ver específico para [spring-cloud-config
] ( cloud.spring.io/spring-cloud-config/… )) e é a configuração usada para encontrar a configuração correta. Então configuração não é provavelmente carregado antes application.properties/yaml