Kata pengantar
Untuk mengkonfigurasi secara fleksibel dalam proyek, kami sering menggunakan file konfigurasi. File konfigurasi umum seperti XML dan properti. Springboot memungkinkan penggunaan properti dan file YAML sebagai konfigurasi eksternal. Dukungan kompiler untuk bahasa YAML tidak cukup baik sekarang, dan file properti masih digunakan sebagai konfigurasi eksternal.
Sebelum konfigurasi Spring Cloud keluar, saya menerapkan pusat konfigurasi berbasis ZK dan menghilangkan file konfigurasi properti lokal. Prinsipnya sangat sederhana, tetapi saya baru saja membebani mergeProperties() dari PropertyplaceHolderConfigurer:
/*** Kelebihan Implementasi Properti Gabungan* First Load File Properties, lalu gabungkan ke properti yang dibaca oleh pusat konfigurasi ZK** @Return Collection Properti gabungan* @throws IoException Exception*/ @OverdeProtected Properties Properties () Properties ();); // Muat konfigurasi properti kelas induk mergeProPerties = super.mergeproperties (); result.putAll (mergeProPerties); // Muat konfigurasi yang dibaca dari zk peta <string, string> configs = loadzkconfigs (); result.putAll (configs); Hasil pengembalian;}
Implementasi ini cukup mudah digunakan dalam proyek musim semi, tetapi baru-baru ini beberapa proyek boot-boot menemukan bahwa implementasi placeholder ini dan @ConfigurationProperties(prefix = "xxx") tidak dapat bekerja dengan baik.
Artinya, properti tidak terselesaikan, dan Anda dapat membacanya dengan cara @Value, tetapi jika ada banyak properti untuk @Value, itu masih cukup rumit. Saya masih cenderung menggunakan awalan @ConfigurationProperties. Jadi saya melihat dokumentasi Spring Boot dan menemukan properti itu Source
memesan:
* Properti Pengaturan Global Devtools di Direktori Home Anda (~/.spring-boot-devtools.properties ketika DevTools aktif).
* @TestPropertySource Anotasi pada tes Anda.
* @Springboottest#Properties Annotation Atribut pada tes Anda.
* Argumen baris perintah.
* Properti dari spring_application_json (inline json tertanam dalam variabel lingkungan atau properti sistem)
* Parameter init servletconfig.
* Parameter init ServletContext.
* Atribut jndi dari java: comp/env.
* Properti Sistem Java (System.getProperties ()).
* Variabel lingkungan OS.
* A RandomValuepropertySource yang hanya memiliki properti secara acak.*.
* Properti aplikasi khusus profil di luar toples Anda yang dikemas (Application- {profile} .properties dan varian YAML)
* Properti aplikasi khusus profil yang dikemas di dalam toples Anda (Application- {profile} .properties dan varian YAML)
* Properti aplikasi di luar toples Anda (Application.properties dan varian YAML).
* Properti Aplikasi Dikemas di dalam JAR Anda (Application.Properties dan Varian YAML).
* Anotasi @PropertySource di kelas @configuration Anda.
* Properti default (ditentukan menggunakan springapplication.setDefaultProperties).
Tidak sulit untuk menemukan bahwa ia dapat memeriksa properti dalam properti sistem java. Dengan kata lain, cukup tulis properti yang dibaca oleh mergeproperties ke dalam alat peraga sistem java, lihat kode sumber, dan temukan titik masuk.
/*** Implementasi properti pemrosesan berlebih* Menurut opsi, putuskan apakah akan menulis alat peraga gabungan ke properti sistem. Boot musim semi membutuhkan * * @param beanfactorytoprocess * @param props gabungan properti * @throws beansexception */ @overrideprotected void ProcessProperties (propersi configurableListableBeanFactory {originalsprocory, properties orisinal. alat peraga); // Tulis ke properti sistem jika (writePropStosystem) {// tulis semua properti ke sistem untuk enumerasi boot pegas <?> PropertieNames = props.propertynames (); while (propertynames.hasmoreElements ()) {string propertyname = (string) propertynames.nextElement (); String PropertyValue = props.getProperty (propertieName); System.setProperty (PropertiDyName, PropertyValue); }}} Untuk menghindari dampak yang berlebihan, sakelar diatur untuk menulis properti sistem. Jika ini adalah proyek Spring Boot, hidupkan, untuk meminimalkan dampak pada proyek boot non-musim semi online. Kemudian, @ConfigurationProperties Spring Boot dengan sempurna membaca properti;
Lihat kode spesifik: org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor
@Overridepublic Obyek postprocessBeforeInitialization (Object Bean, String Beanname) melempar BeansException {configurationproperties annotation = annotationutils .findannotation (bean.getClass (), configurationproperties.class); if (annotation! = null) {postprocessBeforeInitialization (bean, beanname, annotation); } annotation = this.beans.findfactoryAnnotation (beanname, configurationproperties.class); if (annotation! = null) {postprocessBeforeInitialization (bean, beanname, annotation); } return bean;}Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.