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.


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.


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ę.


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


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


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.

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.


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.