Jaka jest różnica między umieszczeniem właściwości w application.yml lub bootstrap.yml w wiosennym rozruchu?

251

Jaka jest różnica między umieszczeniem właściwości w application.yml lub bootstrap.yml w wiosennym rozruchu? W przypadku logowania.config aplikacja działa inaczej.

Rys
źródło
14
bootstrap.yml jest, o ile widzę, specyficzny dla [ spring-cloud-config] ( cloud.spring.io/spring-cloud-config/… )) i jest to konfiguracja używana do znalezienia właściwej konfiguracji. Więc konfiguracja jest prawdopodobnie ładowana przed application.properties/yaml
zapl

Odpowiedzi:

297

Właśnie zapytałem Spring Cloudfacetów i pomyślałem, że powinienem podzielić się informacjami, które tu mam.

bootstrap.ymljest ładowany wcześniej application.yml.

Zwykle jest używany do następujących celów:

  • Korzystając z serwera konfiguracji Spring Cloud, należy określić spring.application.namei spring.cloud.config.server.git.uriwewnątrzbootstrap.yml
  • trochę encryption/decryptioninformacji

Technicznie bootstrap.ymljest ładowany przez nadrzędną sprężynę ApplicationContext. Ten rodzic ApplicationContextjest ładowany przed tym, który używa application.yml.

Michael Isvy
źródło
6
Czy możesz wyjaśnić, dlaczego serwer konfiguracji musi wprowadzić te parametry bootstrap.yml?
Neo
31
Podczas korzystania z Spring Cloud „rzeczywiste” dane konfiguracyjne są zwykle ładowane z serwera. Aby uzyskać adres URL (i inne konfiguracje połączeń, takie jak hasła itp.), Potrzebujesz wcześniejszej konfiguracji „bootstrap”. W ten sposób umieścisz atrybuty serwera konfiguracji w pliku bootstrap.yml, który jest używany do ładowania rzeczywistych danych konfiguracyjnych (które zazwyczaj zastępują zawartość pliku application.yml [jeśli jest obecny]).
Mike Mansell,
10
czasem zastanawiam się, kiedy wiosna wprowadza nowe ekscytujące funkcje, które pozostawiają konwencję nad specyfikacją lub zakładają już jej konwencję i nic nie trzeba określać, a wszystko zostanie rozwiązane samodzielnie, jeśli nie wiosną, a następnie wiosną, a może w przyszłości boot-boot;)
Saurabh
Kiedy mówisz, że bootstrap.yml jest ładowany przed application.yml. Ale kiedy usunę application.yml. Moja aplikacja nie odczytuje bootstrap.yml. Dlaczego?
Jesse
Musimy podkreślić, że plik bootstrap nigdy nie jest zastępowany, ponieważ ma większy priorytet. Według dokumentacji Team's Spring
kelgwiin
84

bootstrap.yml lub bootstrap.properties

Jest używany / potrzebny tylko, jeśli korzystasz z Spring Cloud, a konfiguracja aplikacji jest przechowywana na zdalnym serwerze konfiguracji (np. Spring Cloud Config Server).

Z dokumentacji:

Aplikacja Spring Cloud działa, tworząc kontekst „bootstrap”, który jest kontekstem nadrzędnym dla głównej aplikacji. Po wyjęciu z pudełka odpowiada za ładowanie właściwości konfiguracyjnych ze źródeł zewnętrznych , a także odszyfrowywanie właściwości w lokalnych zewnętrznych plikach konfiguracyjnych.

Zauważ, że bootstrap.ymllub bootstrap.properties może zawierać dodatkową konfigurację (np. Domyślne), ale generalnie wystarczy umieścić tutaj konfigurację bootstrap.

Zazwyczaj zawiera dwie właściwości:

  • lokalizacja serwera konfiguracji ( spring.cloud.config.uri)
  • nazwa aplikacji ( spring.application.name)

Po uruchomieniu Spring Cloud wykonuje połączenie HTTP do serwera konfiguracji z nazwą aplikacji i pobiera konfigurację tej aplikacji.

application.yml lub application.properties

Zawiera standardową konfigurację aplikacji - zazwyczaj konfigurację domyślną, ponieważ każda konfiguracja pobrana podczas procesu ładowania początkowego zastąpi zdefiniowaną tutaj konfigurację.

dustin.schultz
źródło
34

Ta odpowiedź jest bardzo pięknie opisane w książce " Microservices Wywiad pytania, Dla Java Developers (wiosna Boot, Spring chmura, Chmura natywnych aplikacji) przez Munish chandel , wersja 1.30, 25.03.2018.

Poniższa treść została zaczerpnięta z tej książki, a całkowite uznanie dla tej odpowiedzi należy do autora książki, tj. Munish Chandel

application.yml

Plik application.yml / application.properties jest specyficzny dla aplikacji Spring Boot. O ile nie zmienisz położenia zewnętrznych właściwości aplikacji, wiosenny rozruch zawsze ładuje application.yml z następującej lokalizacji:

/src/main/resources/application.yml

W tym pliku możesz zapisać wszystkie zewnętrzne właściwości aplikacji. Wspólne właściwości, które są dostępne w dowolnym projekcie Spring Boot, można znaleźć na stronie : https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Można dostosować te właściwości jako zgodnie z potrzebami aplikacji. Przykładowy plik pokazano poniżej:

spring:
    application:
        name: foobar
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost/test
server:
    port: 9000

bootstrap.yml

Z drugiej strony bootstrap.yml jest specyficzny dla konfiguracji spring-cloud-config i jest ładowany przed application.yml

Plik bootstrap.yml jest potrzebny tylko wtedy, gdy używasz Spring Cloud, a konfiguracja mikrousług jest przechowywana na zdalnym serwerze konfiguracji Spring Cloud.

Ważne uwagi na temat bootstrap.yml

  1. W przypadku korzystania z serwera Spring Cloud Config należy podać nazwę aplikacji i lokalizację git konfiguracji, korzystając z poniższych właściwości.
spring.application.name: „nazwa aplikacji”
spring.cloud.config.server.git.uri: "git-uri-config"

  1. W przypadku korzystania z mikrousług (innych niż serwer konfiguracji w chmurze) musimy określić nazwę aplikacji i lokalizację serwera konfiguracji za pomocą poniższych właściwości
spring.application.name: 
spring.cloud.config.uri: 
  1. Ten plik właściwości może zawierać inną konfigurację związaną ze środowiskiem Spring Cloud, na przykład lokalizację serwera eureka, właściwości związane z szyfrowaniem / deszyfrowaniem.

Po uruchomieniu Spring Cloud wykonuje połączenie HTTP (S) do serwera konfiguracji Spring Cloud z nazwą aplikacji i odzyskuje konfigurację tej aplikacji.

application.yml zawiera domyślną konfigurację mikrousługi, a każda konfiguracja pobrana (z serwera konfiguracji chmury) podczas procesu ładowania początkowego zastąpi konfigurację zdefiniowaną w application.yml

Vaibhav Sharma
źródło
5

Tylko moje 2 centy tutaj ..

Bootstrap.yml lub Bootstrap.properties służy do pobierania konfiguracji z serwera Spring Cloud.

Na przykład w pliku My Bootstrap.properties mam następującą konfigurację

spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888

Po uruchomieniu aplikacji próbuje pobrać konfigurację usługi, łącząc się z http: // localhost: 8888 i patrzy na Calculation-service.properties obecnego na serwerze Spring Cloud Config

Możesz sprawdzić to samo z dzienników Calcuation-Service po uruchomieniu

INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888

Dixit Gangaiah
źródło
4

Cóż, całkowicie zgadzam się z odpowiedziami, które już istnieją w tej kwestii:

  • bootstrap.ymlsłuży do zapisywania parametrów wskazujących, gdzie znajduje się zdalna konfiguracja i kontekst aplikacji rozruchowej jest tworzony za pomocą tych zdalnych konfiguracji.

W rzeczywistości jest także w stanie przechowywać normalne właściwości tak samo jak co application.yml. Ale zwróć uwagę na tę podstępną rzecz:

  • Jeśli umieścisz właściwości bootstrap.yml, będą miały niższy priorytet niż prawie wszystkie inne źródła właściwości, w tym application.yml. Jak opisano tutaj .

Wyjaśnijmy, istnieją dwa rodzaje właściwości związanych z bootstrap.yml:

  • Właściwości ładowane podczas fazy ładowania początkowego. Używamy, bootstrap.ymlaby znaleźć właściciela właściwości (system plików, repozytorium git lub coś innego), a właściwości, które otrzymujemy w ten sposób, mają pierwszeństwo, więc nie można ich zastąpić konfiguracją lokalną. Jak opisano tutaj .
  • Właściwości znajdujące się w bootstrap.yml. Jak wyjaśniono wcześniej, uzyskają niższy priorytet. Użyj ich, aby ustawić wartości domyślne, może to dobry pomysł.

Różnice między umieszczaniem właściwości w application.ymllub bootstrap.ymlw wiosennym rozruchu są następujące:

  • Właściwości ładowania plików konfiguracyjnych w fazie ładowania można umieścić tylko w bootstrap.yml.
  • Podobnie jak w przypadku wszystkich innych właściwości, umieszczenie ich application.ymlbędzie miało wyższy priorytet.
Lebecca
źródło
3

Bootstrap.yml służy do pobierania konfiguracji z serwera. Może to być dla aplikacji chmurowej Spring lub dla innych. Zazwyczaj wygląda to tak:

spring:
  application:
    name: "app-name"
  cloud:
    config:
      uri: ${config.server:http://some-server-where-config-resides}

Po uruchomieniu aplikacja próbuje połączyć się z danym serwerem i odczytać konfigurację na podstawie profilu sprężynowego wspomnianego w konfiguracji uruchamiania / debugowania. bootstrap.yml ładuje pierwszy

Jeśli serwer jest nieosiągalny, aplikacja może nawet nie być w stanie kontynuować. Jeśli jednak konfiguracje pasujące do profilu są dostępne lokalnie, konfiguracje serwera zostaną zastąpione.

Dobre podejscie:

Utrzymaj osobny profil dla lokalnego i uruchom aplikację przy użyciu różnych profili.

Sudip Bhandari
źródło
1

Innym zastosowaniem bootstrap.yml jest ładowanie konfiguracji z mapy konfiguracyjnej kubernetes i tajnych zasobów. Aplikacja musi zaimportować zależność spring-cloud-starter-kubernetes .

Podobnie jak w przypadku Spring Cloud Config, musi to mieć miejsce podczas frazy bootstrap.

Z dokumentów:

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

Tak więc właściwości przechowywane w zasobie configmap z meta.name nazwa-domyślna mogą być przywoływane tak samo jak właściwości w application.yml

Ten sam proces dotyczy tajemnic:

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
Jack Beaken
źródło
0

Bootstrap.yml to pierwszy plik ładowany podczas uruchamiania aplikacji Spring Boot, a application.property jest ładowany podczas uruchamiania aplikacji. Tak więc możesz zachować, może to być poświadczenie serwera konfiguracji itp., W bootstrap.yml, który jest wymagany podczas ładowania aplikacji, a następnie w application.properties, które przechowujesz, może być adres URL bazy danych itp

Anwar Sir
źródło