Qual è la differenza tra mettere una proprietà su application.yml o bootstrap.yml in Spring Boot?


251

Qual è la differenza tra mettere una proprietà su application.yml o bootstrap.yml in Spring Boot? Nel caso logging.config, l'applicazione funziona in modo diverso.


14
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
zapl

Risposte:


297

Ho appena chiesto ai Spring Cloudragazzi e ho pensato di condividere le informazioni che ho qui.

bootstrap.ymlè stato caricato prima application.yml.

In genere viene utilizzato per quanto segue:

  • quando si utilizza Spring Cloud Config Server, è necessario specificare spring.application.namee spring.cloud.config.server.git.uriall'internobootstrap.yml
  • alcune encryption/decryptioninformazioni

Tecnicamente, bootstrap.ymlviene caricato da una molla principale ApplicationContext. Quel genitore ApplicationContextviene caricato prima di quello che utilizza application.yml.


6
Potresti spiegare perché Config Server deve inserire questi parametri bootstrap.yml?
Neo,

31
Quando si utilizza Spring Cloud, i dati di configurazione "reali" vengono generalmente caricati da un server. Per ottenere l'URL (e altre configurazioni di connessione, come password, ecc.), È necessaria una configurazione precedente o "bootstrap". Pertanto, inserisci gli attributi del server di configurazione in bootstrap.yml, che viene utilizzato per caricare i dati di configurazione reali (che generalmente sovrascrive ciò che è in application.yml [se presente]).
Mike Mansell,

10
alcune volte mi chiedo quando la primavera porti nuove entusiasmanti funzionalità che lascia dietro le convenzioni sulle specifiche o ne assumono già le convenzioni e non è necessario specificare nulla e tutto sarà risolto da solo se non entro la primavera, quindi lo stivale di primavera e potrebbe essere in primavera- boot-boot;)
Saurabh,

Quando dici che bootstrap.yml viene caricato prima di application.yml. Ma quando rimuovo application.yml. La mia applicazione non legge bootstrap.yml. Perché?
Jesse,

Dobbiamo evidenziare che il file bootstrap non viene mai sostituito perché ha più precedenza. Secondo la documentazione Team's Spring
kelgwiin

84

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.ymlo 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à:

  • posizione del server di configurazione ( spring.cloud.config.uri)
  • nome dell'applicazione ( 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.


34

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

  1. Se utilizzato con il server Spring Cloud Config, è necessario specificare il nome dell'applicazione e la posizione di configurazione utilizzando le proprietà seguenti.
spring.application.name: "nome-applicazione"
spring.cloud.config.server.git.uri: "git-uri-config"

  1. Se utilizzato con microservizi (diversi dal server di configurazione cloud), è necessario specificare il nome dell'applicazione e il percorso del server di configurazione utilizzando le proprietà seguenti
spring.application.name: 
spring.cloud.config.uri: 
  1. Questo file delle proprietà può contenere altre configurazioni relative all'ambiente Spring Cloud, ad es. Posizione del server eureka, proprietà correlate alla crittografia / decrittografia.

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


5

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


4

Bene, sono totalmente d'accordo con le risposte già esistenti su questo punto:

  • bootstrap.ymlviene 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.ymlfanno. Ma presta attenzione a questa cosa delicata:

  • Se si inseriscono proprietà 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:

  • Proprietà caricate durante la fase di bootstrap. Usiamo bootstrap.ymlper 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 .
  • Proprietà presenti in 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.ymlo l' bootstrap.ymlavvio in primavera sono:

  • Le proprietà per il caricamento dei file di configurazione nella fase bootstrap possono essere inserite solo in bootstrap.yml.
  • Come per tutti gli altri tipi di proprietà, posizionarli in application.ymlavrà una precedenza più alta.

3

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. bootstrap.yml carica il primo

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.


1

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

0

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.