Risposte:
Ho appena chiesto ai Spring Cloud
ragazzi e ho pensato di condividere le informazioni che ho qui.
bootstrap.yml
è stato caricato prima application.yml
.
In genere viene utilizzato per quanto segue:
spring.application.name
e spring.cloud.config.server.git.uri
all'internobootstrap.yml
encryption/decryption
informazioniTecnicamente, bootstrap.yml
viene caricato da una molla principale ApplicationContext
. Quel genitore ApplicationContext
viene caricato prima di quello che utilizza application.yml
.
bootstrap.yml
?
bootstrap.yml
o bootstrap.properties
Viene utilizzato / necessario solo se si utilizza Spring Cloud e la configurazione dell'applicazione è archiviata su un server di configurazione remoto (ad esempio Spring Cloud Config Server).
Dalla documentazione:
Un'applicazione Spring Cloud funziona creando un contesto "bootstrap", che è un contesto padre per l'applicazione principale. È pronto per il caricamento delle proprietà di configurazione da fonti esterne e anche per la decrittografia delle proprietà nei file di configurazione esterni locali.
Si noti che bootstrap.yml
o bootstrap.properties
può contenere una configurazione aggiuntiva (ad es. Valori predefiniti) ma in genere è necessario inserire qui solo la configurazione bootstrap.
In genere contiene due proprietà:
spring.cloud.config.uri
)spring.application.name
)All'avvio, Spring Cloud effettua una chiamata HTTP al server di configurazione con il nome dell'applicazione e recupera la configurazione dell'applicazione.
application.yml
o application.properties
Contiene la configurazione standard dell'applicazione - in genere la configurazione predefinita poiché qualsiasi configurazione recuperata durante il processo bootstrap sovrascriverà la configurazione qui definita.
Questa risposta è stata molto ben spiegata nel libro " Domande sui colloqui sui microservizi, per sviluppatori Java (Spring Boot, Spring Cloud, Cloud Native Applications) di Munish Chandel , Versione 1.30, 25.03.2018.
Il seguente contenuto è stato preso da questo libro e il merito totale di questa risposta va all'autore del libro, ovvero Munish Chandel
application.yml
Il file application.yml / application.properties è specifico delle applicazioni Spring Boot. A meno che non si cambi la posizione delle proprietà esterne di un'applicazione, l'avvio a molla caricherà sempre application.yml dalla seguente posizione:
/src/main/resources/application.yml
In questo file è possibile archiviare tutte le proprietà esterne per l'applicazione. Le proprietà comuni disponibili in qualsiasi progetto Spring Boot sono disponibili all'indirizzo: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html È possibile personalizzare queste proprietà come secondo le esigenze della tua applicazione. Il file di esempio è mostrato di seguito:
spring:
application:
name: foobar
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
bootstrap.yml
bootstrap.yml è invece specifico per spring-cloud-config e viene caricato prima di application.yml
bootstrap.yml è necessario solo se si utilizza Spring Cloud e la configurazione del microservizio è archiviata su un Spring Cloud Config Server remoto.
Punti importanti su bootstrap.yml
spring.application.name: "nome-applicazione" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
All'avvio, Spring Cloud effettua una chiamata HTTP (S) al server Spring Cloud Config con il nome dell'applicazione e recupera la configurazione dell'applicazione.
application.yml contiene la configurazione predefinita per il microservizio e qualsiasi configurazione recuperata (dal server di configurazione cloud) durante il processo di bootstrap sovrascriverà la configurazione definita in application.yml
Solo i miei 2 centesimi qui ..
Bootstrap.yml o Bootstrap.properties viene utilizzato per recuperare la configurazione da Spring Cloud Server.
Ad esempio, nel mio file Bootstrap.properties ho la seguente configurazione
spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888
All'avvio dell'applicazione, tenta di recuperare la configurazione per il servizio connettendosi a http: // localhost: 8888 e guarda Calculation-service.properties presente nel server Spring Cloud Config
È possibile convalidare lo stesso dai registri di Calcuation-Service quando lo si avvia
INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
Bene, sono totalmente d'accordo con le risposte già esistenti su questo punto:
bootstrap.yml
viene utilizzato per salvare i parametri che indicano dove si trova la configurazione remota e viene creato il contesto dell'applicazione Bootstrap con queste configurazioni remote.In realtà, è anche in grado di memorizzare le proprietà normali allo stesso modo di quello che application.yml
fanno. Ma presta attenzione a questa cosa delicata:
bootstrap.yml
, avranno una precedenza inferiore rispetto a quasi tutte le altre fonti di proprietà, incluso application.yml. Come descritto qui .Cerchiamo di chiarire, ci sono due tipi di proprietà relative a bootstrap.yml
:
bootstrap.yml
per trovare il proprietario delle proprietà (un file system, un repository git o qualcos'altro) e le proprietà che otteniamo in questo modo hanno una precedenza elevata, quindi non possono essere ignorate dalla configurazione locale. Come descritto qui .bootstrap.yml
. Come spiegato in precedenza, avranno una precedenza inferiore. Usali per impostare i valori predefiniti forse una buona idea.Quindi le differenze tra l'inserimento di una proprietà application.yml
o l' bootstrap.yml
avvio in primavera sono:
bootstrap.yml
.application.yml
avrà una precedenza più alta.Bootstrap.yml viene utilizzato per recuperare la configurazione dal server. Può essere per un'applicazione cloud Spring o per altri. In genere sembra:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
All'avvio dell'applicazione, tenta di connettersi al server specificato e di leggere la configurazione in base al profilo di primavera menzionato nella configurazione di esecuzione / debug.
Se il server non è raggiungibile, l'applicazione potrebbe anche non essere in grado di procedere oltre. Tuttavia, se le configurazioni corrispondenti al profilo sono presenti localmente, le configurazioni del server vengono sovrascritte.
Buon approccio:
Mantenere un profilo separato per locale ed eseguire l'app utilizzando profili diversi.
Un altro uso di bootstrap.yml è caricare la configurazione dalla configmap di kubernetes e dalle risorse segrete . L'applicazione deve importare la dipendenza spring-cloud-starter-kubernetes .
Come con Spring Cloud Config, questo deve avvenire durante la frase bootstrap.
Dai documenti:
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
Quindi le proprietà memorizzate nella risorsa configmap con meta.name nome-predefinito possono essere referenziate esattamente come le proprietà in application.yml
E lo stesso processo si applica ai segreti:
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 è il primo file caricato all'avvio dell'applicazione di avvio primaverile e application.property viene caricato all'avvio dell'applicazione. Quindi, continui, potrebbero essere le credenziali del tuo server di configurazione ecc., In bootstrap.yml che è richiesto durante il caricamento dell'applicazione e quindi in application.properties che conservi potrebbero essere URL del database ecc.
bootstrap.yml
è per quanto posso vedere specifico di [spring-cloud-config
] ( cloud.spring.io/spring-cloud-config/… )) ed è la configurazione utilizzata per trovare la giusta configurazione. Quindi la configurazione probabilmente è stata caricata prima di application.properties/yaml