Jawaban:
Saya baru saja bertanya kepada Spring Cloud
teman - teman dan berpikir saya harus membagikan info yang saya miliki di sini.
bootstrap.yml
dimuat sebelumnya application.yml
.
Ini biasanya digunakan untuk yang berikut:
spring.application.name
dan spring.cloud.config.server.git.uri
di dalamnyabootstrap.yml
encryption/decryption
informasiSecara teknis, bootstrap.yml
dimuat oleh Spring induk ApplicationContext
. Orang tua ApplicationContext
itu dimuat sebelum yang digunakan application.yml
.
bootstrap.yml
?
bootstrap.yml
atau bootstrap.properties
Ini hanya digunakan / diperlukan jika Anda menggunakan Spring Cloud dan konfigurasi aplikasi Anda disimpan pada server konfigurasi jarak jauh (misalnya Spring Cloud Config Server).
Dari dokumentasi:
Aplikasi Spring Cloud beroperasi dengan membuat konteks "bootstrap", yang merupakan konteks induk untuk aplikasi utama. Out of the box bertanggung jawab untuk memuat properti konfigurasi dari sumber eksternal , dan juga mendekripsi properti dalam file konfigurasi eksternal lokal.
Perhatikan bahwa bootstrap.yml
atau bootstrap.properties
dapat berisi konfigurasi tambahan (misalnya default) tetapi umumnya Anda hanya perlu meletakkan konfigurasi bootstrap di sini.
Biasanya mengandung dua properti:
spring.cloud.config.uri
)spring.application.name
)Saat mulai, Spring Cloud melakukan panggilan HTTP ke server konfigurasi dengan nama aplikasi dan mengambil kembali konfigurasi aplikasi itu.
application.yml
atau application.properties
Berisi konfigurasi aplikasi standar - biasanya konfigurasi default karena konfigurasi apa pun yang diambil selama proses bootstrap akan menimpa konfigurasi yang ditentukan di sini.
Jawaban ini telah dijelaskan dengan sangat indah dalam buku " Pertanyaan Wawancara microservices, Untuk Pengembang Java (Spring Boot, Spring Cloud, Aplikasi Cloud Asli) oleh Munish Chandel , Versi 1.30, 25.03.2018.
Konten berikut telah diambil dari buku ini, dan kredit total untuk jawaban ini jatuh ke Penulis buku yaitu Munish Chandel
application.yml
file application.yml / application.properties khusus untuk aplikasi Spring Boot. Kecuali Anda mengubah lokasi properti eksternal suatu aplikasi, spring boot akan selalu memuat application.yml dari lokasi berikut:
/src/main/resources/application.yml
Anda dapat menyimpan semua properti eksternal untuk aplikasi Anda dalam file ini. Properti umum yang tersedia di proyek Spring Boot dapat ditemukan di: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Anda dapat menyesuaikan properti ini sebagai sesuai kebutuhan aplikasi Anda. File sampel ditunjukkan di bawah ini:
spring:
application:
name: foobar
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/test
server:
port: 9000
bootstrap.yml
bootstrap.yml di sisi lain khusus untuk pegas-cloud-config dan dimuat sebelum application.yml
bootstrap.yml hanya diperlukan jika Anda menggunakan Spring Cloud dan konfigurasi microservice Anda disimpan pada Server Cloud Cloud jauh.
Poin penting tentang bootstrap.yml
spring.application.name: "application-name" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
Saat mulai, Spring Cloud melakukan panggilan HTTP (S) ke Server Spring Cloud Config dengan nama aplikasi dan mengambil kembali konfigurasi aplikasi itu.
application.yml berisi konfigurasi default untuk layanan microser dan konfigurasi apa pun yang diambil (dari cloud config server) selama proses bootstrap akan menimpa konfigurasi yang ditentukan dalam application.yml
Hanya 2 Cents saya di sini ..
Bootstrap.yml atau Bootstrap.properties digunakan untuk mengambil konfigurasi dari Spring Cloud Server.
Sebagai contoh, dalam file Bootstrap.properties Saya, saya memiliki Config berikut
spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888
Saat memulai aplikasi, ia mencoba mengambil konfigurasi untuk layanan dengan menghubungkan ke http: // localhost: 8888 dan melihat Calculation-service.properties yang ada di server Spring Cloud Config
Anda dapat memvalidasi yang sama dari log Calcuation-Service ketika Anda memulai
INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
Baiklah, saya sepenuhnya setuju dengan jawaban yang sudah ada tentang hal ini:
bootstrap.yml
digunakan untuk menyimpan parameter yang menunjukkan di mana konfigurasi jarak jauh berada dan Konteks Aplikasi Bootstrap dibuat dengan konfigurasi jarak jauh ini.Sebenarnya, ia juga dapat menyimpan properti normal sama seperti apa yang application.yml
dilakukan. Tapi perhatikan hal rumit ini:
bootstrap.yml
, mereka akan mendapatkan prioritas lebih rendah daripada hampir semua sumber properti lainnya, termasuk application.yml. Seperti dijelaskan di sini .Mari kita perjelas, ada dua jenis properti yang terkait dengan bootstrap.yml
:
bootstrap.yml
untuk menemukan pemilik properti (Sistem file, git repositori atau sesuatu yang lain), dan properti yang kami dapatkan dengan cara ini adalah dengan prioritas tinggi, sehingga tidak dapat ditimpa oleh konfigurasi lokal. Seperti dijelaskan di sini .bootstrap.yml
. Seperti yang dijelaskan lebih awal, mereka akan mendapatkan prioritas lebih rendah. Gunakan mereka untuk mengatur default mungkin ide yang bagus.Jadi perbedaan antara meletakkan properti di application.yml
atau bootstrap.yml
di boot musim semi adalah:
bootstrap.yml
.application.yml
akan mendapatkan prioritas lebih tinggi.Bootstrap.yml digunakan untuk mengambil konfigurasi dari server. Ini bisa untuk aplikasi cloud Spring atau untuk orang lain. Biasanya terlihat seperti:
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
Ketika kita memulai aplikasi itu mencoba untuk terhubung ke server yang diberikan dan membaca konfigurasi berdasarkan profil pegas yang disebutkan dalam konfigurasi run / debug.
Jika server adalah aplikasi yang tidak terjangkau bahkan mungkin tidak dapat melanjutkan lebih jauh. Namun, jika konfigurasi yang cocok dengan profil hadir secara lokal, konfigurasi server akan diganti.
Pendekatan yang baik:
Pertahankan profil terpisah untuk lokal dan jalankan aplikasi menggunakan profil yang berbeda.
Penggunaan lain untuk bootstrap.yml adalah untuk memuat konfigurasi dari kubernetes configmap dan sumber daya rahasia . Aplikasi harus mengimpor spring-cloud-starter-kubernetes dependensi .
Seperti dengan Spring Cloud Config, ini harus terjadi selama frase bootstrap.
Dari dokumen:
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
Jadi properti yang disimpan dalam sumber daya configmap dengan meta.name nama-default dapat dirujuk sama seperti properti di application.yml
Dan proses yang sama berlaku untuk rahasia:
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
Bootstrap.yml adalah file pertama yang dimuat saat Anda memulai pegas boot aplikasi dan application.property dimuat saat aplikasi dimulai. Jadi, Anda tetap, mungkin kredensial server konfigurasi Anda, dll., Di bootstrap.yml yang diperlukan saat memuat aplikasi dan kemudian di application.properti yang Anda simpan mungkin berupa URL basis data dll.
bootstrap.yml
sejauh yang saya bisa melihat khusus untuk [spring-cloud-config
] ( cloud.spring.io/spring-cloud-config/… )) dan itu konfigurasi yang digunakan untuk menemukan konfigurasi yang tepat. Jadi konfigurasi mungkin ada dimuat sebelum application.properties/yaml