Spring boot'ta application.yml veya bootstrap.yml üzerinde bir özellik koymak arasındaki fark nedir?


251

Spring boot'ta application.yml veya bootstrap.yml üzerinde bir özellik koymak arasındaki fark nedir? Logging.config durumunda, uygulama farklı çalışır.


14
bootstrap.yml [ spring-cloud-config] ( cloud.spring.io/spring-cloud-config/… ) 'a özgü görebildiğim kadarıyla doğru yapılandırmayı bulmak için kullanılan yapılandırmadır. Yani config muhtemelen application.properties/yaml
zapl

Yanıtlar:


297

Ben sadece Spring Cloudçocuklar sordum ve burada var olan bilgileri paylaşmak gerektiğini düşündüm.

bootstrap.ymlönce yüklenmiştir application.yml.

Genellikle aşağıdakiler için kullanılır:

  • Spring Cloud Config Server kullanırken, içinde spring.application.nameve spring.cloud.config.server.git.uriiçinde belirtmelisinizbootstrap.yml
  • bazı encryption/decryptionbilgiler

Teknik olarak, bootstrap.ymlbir ana Yay tarafından yüklenir ApplicationContext. Bu üst öğe ApplicationContext, kullanılan ana öğeden önce yüklenir application.yml.


6
Config Server'ın neden bu parametreleri koyması gerektiğini açıklayabilir misiniz bootstrap.yml?
Neo

31
Spring Cloud kullanırken, 'gerçek' yapılandırma verileri genellikle bir sunucudan yüklenir. URL'yi (ve şifreler vb. Gibi diğer bağlantı yapılandırmasını) almak için daha önceki veya "önyükleme" yapılandırmasına ihtiyacınız vardır. Böylece, yapılandırma sunucusu özniteliklerini gerçek yapılandırma verilerini yüklemek için kullanılan bootstrap.yml dosyasına (genellikle bir application.yml [varsa] geçersiz kılar) koyarsınız.
Mike Mansell

10
bahar zaman şartname üzerinde sözleşmenin arkasında bıraktığı yeni heyecan verici özellikler getirdiğinde merak ediyorum ya da zaten konvansiyonu varsayarlar ve hiçbir şey belirtilmesine gerek yoktur ve bahar sonra bahar çizme değilse her şey kendi başına çözülecektir ve gelecekteki baharda olabilir- boot-boot;)
Saurabh

Bootstrap.yml dosyası yüklendiğinde, application.yml dosyasından önce yüklenir. Ama application.yml kaldırdığımda. Benim uygulama bootstrap.yml okumuyor. Neden?
Jesse

Daha fazla önceliğe sahip olduğundan bootstrap dosyasının hiçbir zaman geçersiz kılmadığını vurgulamamız gerekir. Ekibin Baharı
kelgwiin

84

bootstrap.yml veya bootstrap.properties

Yalnızca Spring Cloud kullanıyorsanız ve uygulamanızın yapılandırması bir uzak yapılandırma sunucusunda (ör. Spring Cloud Config Server) depolanmışsa kullanılır / gereklidir .

Belgelerden:

Bir Spring Cloud uygulaması, ana uygulama için ana bağlam olan bir "bootstrap" bağlamı oluşturarak çalışır. Kutunun dışında, harici kaynaklardan yapılandırma özelliklerini yüklemek ve ayrıca yerel harici yapılandırma dosyalarındaki özelliklerin şifresini çözmek de sorumludur .

Not olduğunu bootstrap.ymlveya bootstrap.properties edebilirsiniz ek yapılandırma (örn varsayılan), ancak genellikle sadece burada önyükleme yapılandırma koymak gerekir içerirler.

Genellikle iki özellik içerir:

  • yapılandırma sunucusunun konumu ( spring.cloud.config.uri)
  • uygulamanın adı ( spring.application.name)

Başlangıçta Spring Cloud, yapılandırma sunucusuna uygulamanın adıyla bir HTTP çağrısı yapar ve uygulamanın yapılandırmasını geri alır.

application.yml veya application.properties

Standart uygulama yapılandırmasını içerir - önyükleme işlemi sırasında alınan herhangi bir yapılandırma burada tanımlanan yapılandırmayı geçersiz kılacağından tipik olarak varsayılan yapılandırma içerir.


34

Bu cevap çok güzel "kitabında açıkladı olmuştur Java Geliştiriciler (Bahar Boot, Bahar Cloud, Cloud Yerel Uygulamaları) için, Microservices Mülakat Soruları tarafından Munish chandel , Version 1.30, 2018/03/25.

Bu kitaptan aşağıdaki içerik alınmıştır ve bu cevap için toplam kredi Munish Chandel kitabının yazarına gitmektedir.

application.yml

application.yml / application.properties dosyası Spring Boot uygulamalarına özgüdür. Bir uygulamanın harici özelliklerinin konumunu değiştirmediğiniz sürece, yay önyüklemesi her zaman application.yml dosyasını aşağıdaki konumdan yükler :

/src/main/resources/application.yml

Uygulamanız için tüm harici özellikleri bu dosyada saklayabilirsiniz. Herhangi bir Spring Boot projesinde bulunan ortak özellikleri şu adreste bulabilirsiniz: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Bu özellikleri şu şekilde özelleştirebilirsiniz : Uygulama ihtiyaçlarınıza göre. Örnek dosya aşağıda gösterilmiştir:

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

bootstrap.yml

Öte yandan bootstrap.yml , spring-cloud-config'e özgüdür ve uygulamadan önce yüklenir.

bootstrap.yml yalnızca Spring Cloud kullanıyorsanız ve mikro hizmet yapılandırmanız uzak bir Spring Cloud Config Server'da depolanıyorsa gereklidir.

Bootstrap.yml hakkında önemli noktalar

  1. Spring Cloud Config sunucusuyla birlikte kullanıldığında, aşağıdaki özellikleri kullanarak uygulama adını ve config git konumunu belirtmeniz gerekir.
spring.application.name: "uygulama adı"
spring.cloud.config.server.git.uri: "git-uri-config"

  1. Mikro hizmetlerle (bulut yapılandırma sunucusu dışında) kullanıldığında, aşağıdaki özellikleri kullanarak yapılandırma sunucusunun uygulama adını ve konumunu belirtmemiz gerekir
spring.application.name: 
spring.cloud.config.uri: 
  1. Bu özellikler dosyası, eureka sunucusunun konumu, şifreleme / şifre çözme ile ilgili özellikler için Spring Cloud ortamıyla ilgili başka yapılandırmalar içerebilir.

Başlangıçta Spring Cloud, Spring Cloud Config Server'a uygulamanın adıyla bir HTTP (S) çağrısı yapar ve o uygulamanın yapılandırmasını geri alır.

application.yml, mikro hizmet için varsayılan yapılandırmayı içerir ve önyükleme işlemi sırasında alınan herhangi bir yapılandırma (bulut yapılandırma sunucusundan) application.yml içinde tanımlanan yapılandırmayı geçersiz kılar.


5

Burada sadece 2 sentim var ..

Bootstrap.yml veya Bootstrap.properties, yapılandırmayı Spring Cloud Server'dan almak için kullanılır.

Örneğin, Bootstrap.properties dosyamda aşağıdaki Yapılandırma var

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

Uygulamayı başlattığınızda, http: // localhost: 8888 adresine bağlanarak hizmet yapılandırmasını almaya çalışır. ve Spring Cloud Config sunucusunda bulunan Calculation-service.properties bakar

Aynı işlemi, başlattığınızda Calcuation-Service günlüklerinden de doğrulayabilirsiniz.

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


4

Bu noktada zaten var olan cevaplara tamamen katılıyorum:

  • bootstrap.yml, uzak yapılandırmanın nerede olduğuna işaret eden parametreleri kaydetmek için kullanılır ve bu uzak yapılandırma ile Bootstrap Uygulama Bağlamı oluşturulur.

Aslında normal özellikleri olduğu gibi saklayabilir application.yml. Ancak bu zor şeye dikkat edin:

  • Özellikleri yerleştirirseniz bootstrap.yml, application.yml dahil olmak üzere hemen hemen tüm diğer özellik kaynaklarından daha düşük önceliğe sahip olurlar. Olarak tarif burada .

Açıklığa kavuşturalım, iki tür özellik var bootstrap.yml:

  • Önyükleme aşaması sırasında yüklenen özellikler. Biz kullanmak bootstrap.ymlözellikleri tutucu (A dosya sistemini, git depo veya başka bir şey) bulmak için ve onlar yerel yapılandırma tarafından geçersiz kılınmış olamaz bu yüzden bu şekilde olsun özellikleri, yüksek önceliğe sahip bulunmaktadır. Olarak tarif burada .
  • İçindeki özellikler bootstrap.yml. Erken açıklandığı gibi, daha düşük öncelik kazanırlar. Onları varsayılanları ayarlamak için kullanın belki de iyi bir fikir.

Yani bir mülk koymak arasındaki farklar application.ymlbootstrap.yml bahar önyüklemesine veya bahar önyüklemesine şunlardır:

  • Yapılandırma dosyalarını önyükleme aşamasında yükleme özellikleri yalnızca bootstrap.yml .
  • Diğer tüm özellik türlerine gelince, onları yerleştirmek application.ymldaha yüksek önceliğe sahip olacaktır.

3

Bootstrap.yml, yapılandırmayı sunucudan almak için kullanılır. Bir Spring bulut uygulaması veya diğerleri için olabilir. Genellikle şöyle görünür:

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

Uygulamayı başlattığımızda, verilen sunucuya bağlanmaya ve çalıştırma / hata ayıklama yapılandırmasında belirtilen yay profiline göre yapılandırmayı okumaya çalışır. bootstrap.yml ilk yükler

Sunucuya erişilemiyorsa uygulama daha fazla ilerleyemeyebilir. Ancak, profille eşleşen yapılandırmalar yerel olarak mevcutsa, sunucu yapılandırmaları geçersiz kılınır.

Iyi bir yaklaşım:

Yerel için ayrı bir profil oluşturun ve uygulamayı farklı profiller kullanarak çalıştırın.


1

Başka bir kullanımı bootstrap.yml Kubernetes yük yapılandırmasına olan configMap ve gizli kaynaklar. Uygulama spring-cloud-starter-kubernet'leri içe aktarmalıdır bağımlılığını .

Spring Cloud Config'te olduğu gibi, bunun önyükleme ifadesi sırasında gerçekleşmesi gerekir.

Dokümanlardan:

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

Bu nedenle meta.name default-name ile configmap kaynağında saklanan özelliklere başvurulabilir. başvurulabilir

Aynı süreç sırlar için de geçerlidir:

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, bahar önyükleme uygulamasını başlattığınızda yüklenen ilk dosyadır ve uygulama başladığında application.property yüklenir. Bu nedenle, uygulama yüklenirken gerekli bootstrap.yml dosyasında yapılandırma sunucunuzun kimlik bilgileri vb.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.