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.