Sumber konfigurasi aplikasi biasanya server server konfigurasi jarak jauh. Secara default, prioritas konfigurasi lokal lebih rendah dari repositori konfigurasi jarak jauh. Jika Anda ingin mengimplementasikan variabel sistem aplikasi lokal dan mengkonfigurasi file untuk menimpa nilai properti di repositori jarak jauh, Anda dapat mengaturnya sebagai berikut:
Spring: Cloud: Config: AllowOverride: TrueOverridenone: TrueOverridesystemproPerties: False
Melalui konfigurasi di atas, klien dapat mencapai prioritas yang lebih tinggi dalam konfigurasi lokal dan tidak dapat ditimpa. Karena versi Spring Cloud saat ini yang didasarkan pada Edgware.RELEASE , pengaturan di atas tidak berfungsi, tetapi gunakan nilai default di PropertySourceBootstrapProperties . Untuk situasi tertentu, lihat masalah: https://github.com/spring-cloud/spring-cloud-commons/pull/250. Kami akan berbicara tentang sumber spesifik bug dalam analisis berikut.
Analisis Kode Sumber
ConfigServicePropertySourcelocator
Menimpa properti konfigurasi jarak jauh pada akhirnya terkait dengan mendapatkan konfigurasi pada awal klien. Bagaimana cara menghadapinya setelah mendapatkan konfigurasi? Mari kita lihat diagram kelas kelas akuisisi sumber daya ConfigServicePropertySourcelocator di Spring Cloud Config.
ConfigServicePropertySourcelocator pada dasarnya adalah pencari sumber daya properti, dan metode utamanya adalah lokasi (lingkungan lingkungan). Pertama, ganti placeholder di ConfigClientProperties dengan aplikasi, profil dan label lingkungan di mana aplikasi saat ini berjalan, dan menginisialisasi restemplate, kemudian beralih melalui label array sampai informasi konfigurasi yang valid diperoleh, dan akhirnya coba lagi berdasarkan apakah gagal dengan cepat. Proses utamanya adalah sebagai berikut:
Temukan (lingkungan lingkungan) Hubungi metode getRemoteeNeenment (restTemplate, properti, label, status) untuk mendapatkan data konfigurasi pada server jarak jauh melalui http. Implementasinya juga sangat sederhana. Tampilkan placeholder di jalur permintaan penggantian, dan kemudian kumpulkan header. Setelah dirakit, permintaan dapat dikirim dan hasilnya akan dikembalikan.
Dalam implementasi di atas, kami melihat bahwa informasi konfigurasi yang diperoleh disimpan di CompositEpropertySource. Bagaimana kita menggunakannya? Kelas penting lain untuk ditambahkan di sini adalah propertiSourceBootStrapConfiguration, yang mengimplementasikan antarmuka ApplicationContextInitializer. Antarmuka ini akan menyegarkan () dipanggil kembali sebelum konteks aplikasi disegarkan, sehingga melakukan operasi inisialisasi. Tumpukan panggilan setelah aplikasi dimulai adalah sebagai berikut:
SpringApplicationBuilder.run () -> springApplication.run () -> springApplication.createAndrefreshContext () -> springapplication.ApplyInitializers () -> PropertiesourceBoBOTTRAPConfiguration.Initialize () PropertiesSourceBoothiguration
Metode lokasi dari ConfigServicePropertySourcelocator di atas akan dipanggil dalam inisialisasi, sehingga untuk memastikan bahwa konteks dapat memperoleh informasi konfigurasi yang diperlukan sebelum menyegarkan. Mari kita lihat metode inisialisasi:
Public Class PropertySourCoBOTStrapConfigurationImplements ApplicationContextInitializer <ConfigurableApplicationContext>, memesan {private int order = ordered.highest_precedence + 10; @Autowired (wajib = false) Daftar pribadi <Pro propertySourcelocator> Propertiesourcelocators = new ArrayList <> (); @Override public void initialize (configurableApplicationContext applicationContext) {compositepropertysource composite = compositepropertysource baru (bootstrap_property_source_name); // Urutkan array Propertiesourcelocators dan ikuti annotationAwareOrdComparator default annotationAwareOrderComparator.sort (this.propertysourcelocators); boolean kosong = true; // Dapatkan Konteks Lingkungan yang Berjalan Konfigurasi Lingkungan VironMen = ApplicationContext.getEnvironment (); for (Propertiesourcelocator Locator: this.propertysourcelocators) {// transtraight this.propertysourcelocators propertiSoursource <?> source = null; source = locator.locate (lingkungan); if (source == null) {lanjutkan; } logger.info ("Sumber properti yang ditemukan:" + sumber); // Tambahkan Sumber ke Daftar Tertaut dari PropertiesSource Composite.AddPropertySource (Sumber); kosong = false; } // Hanya jika sumbernya tidak kosong, itu akan diatur ke lingkungan jika (! Kosong) {// Mengembalikan bentuk variabel lingkungan, yang dapat dilakukan seperti addFirst dan addlast mutablePropertySources propertiesSourssources = lingkungan.getPropertySources (); String LogConfig = Environment.ResolvePlaceHolders ("$ {LOGGING.CONFIG:}"); Logfile logfile = logfile.get (lingkungan); if (propertysources.contains (bootstrap_property_source_name)) {// hapus bootstrapproperties propertysources.remove (bootstrap_property_source_name); } // atur Sumber Properti InsertPropertySources (PropertiesSources, Composite); reinitializeloggingsystem (lingkungan, logconfig, logfile); setLoglevels (lingkungan); // Buang beberapa informasi konfigurasi aktivitas dari profil yang ditangani termasukProfil (lingkungan); }} // ...}Mari kita lihat operasi apa yang dilakukan dalam metode inisialisasi.
Mengembalikan bentuk variabel lingkungan, yang dapat dilakukan seperti addFirst, addlast
Hapus Bootstrapproperties di Propertiessources
Menurut aturan override server konfigurasi, atur sumber properti
Menangani informasi konfigurasi untuk beberapa profil aktif
Saat menginisialisasi metode inisialisasi, pertama -tama lintasi metode lokasi semua objek tipe properti -properti , lalu masukkan nilai properti yang diperoleh dalam berbagai cara ke dalam metode CompositEpropertysysyse , dan akhirnya memanggil metode insertPropertySources (properti, komposit) untuk mengaturnya ke dalam lingkungan. Konteks Cloud Musim Semi menyediakan propertiSourceBootStrapproperties yang menimpa properti jarak jauh, dan menggunakan kelas konfigurasi ini untuk menentukan prioritas sumber properti.
Sumber Sumber InsertPropertysysy Private (MutablePropertySources Propertiessources, CompositEpropertysource Composite) {MutablePropertySources Incoming = new MutablePropertySources (); inComing.addfirst (komposit); PropertiySourceBootTRapproperties remoteProPerties = new PropertiesSourceBootTRappRoperties (); baru relaxedDatabinder (RemoteProperties, "spring.cloud.config"). BID (Properti Baru SourcespropertyValues (Masuk)); // Jika ditimpa lokal tidak diizinkan (! RemoteProperties.isallowoverRide () || (! RemoteProperties.isOverridenone () && remoteProperties.isoverridesystempoperties ())) {propertiysources.addfirst (komposit); kembali; } // OverridenOne benar, konfigurasi eksternal memiliki prioritas terendah IF (remoteProPerties.isOverridenOne ()) {propertysources.addLast (komposit); kembali; } if (PropertiesSources .contains (StandardEnvironment.system_environment_property_source_name)) {// Tetapkan prioritas konfigurasi eksternal menurut overrideSystemproperties if (! RemoteProperty.isoverridSystemProperies () {) {) {) {remoteProperties.isOverridSyStemproPerties () {) {) {) {) StandardEnvironment.system_environment_property_source_name, komposit); } else {propertysources.addbefore (StandardEnvironment.system_environment_property_source_name, komposit); }} else {propertysources.addLast (composite); }}Implementasi di atas terutama menyesuaikan prioritas beberapa sumber konfigurasi berdasarkan properti di propertiSourceBootTtrapties . Dari implementasinya, kita dapat melihat bahwa objek PropertySourceBootStrapties diinisialisasi secara langsung, menggunakan nilai properti default dan tidak disuntikkan ke dalam apa yang kami atur dalam file konfigurasi.
Implementasi yang diperbaiki:
@Autowired (wajib = false) private propertysourceBootStrapties remoteProPertiesForoverriding; @Override public int getorder () {return this.order; Sumber Sumber InsertPropertysysy Private (MutablePropertySources Propertiessources, CompositEpropertysource Composite) {MutablePropertySources Incoming = new MutablePropertySources (); inComing.addfirst (komposit); PropertiesSourceBootTRappRoperties remoteProPerties = remotePropertiesForoverriding == null? Properti NewsourceBootTrapproperties (): RemotePropertiesForoverriding;Meringkaskan
Di atas adalah penjelasan terperinci tentang Contoh Properti Konfigurasi Jarak Jauh Cloud Spring Cloud yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!