Cakupan konfigurasi lebih baik dari profil
Dalam praktik produksi, cakupan konfigurasi adalah metode umum untuk menyelesaikan konfigurasi yang berbeda di lingkungan yang berbeda. Misalnya, gunakan file konfigurasi di server produksi untuk menimpa file dalam paket, atau gunakan layanan konfigurasi terpusat untuk menimpa konfigurasi bisnis default.
Dibandingkan dengan mekanisme profil (seperti profil Maven dan properti spesifik profil Spring Boot), lingkungan yang berbeda menggunakan file konfigurasi yang berbeda, dan metode overlay lebih menguntungkan. Pemrogram tidak perlu peduli dengan alamat, akun, dan informasi lain dari database lingkungan produksi selama pengembangan. Mereka dapat berjalan di lingkungan yang berbeda dengan membangun pada satu waktu. Mekanisme profil perlu menulis konfigurasi lingkungan produksi ke dalam file sumber daya proyek, dan parameter konstruksi yang berbeda atau parameter operasi harus digunakan untuk lingkungan yang berbeda.
Spring menyediakan kemampuan ekspansi konfigurasi yang fleksibel, dengan banyak cara untuk mengintegrasikan sumber atribut khusus ke dalamnya, memungkinkan cakupan konfigurasi yang mudah.
Artikel ini ditulis berdasarkan boot musim semi 1.4.8/spring 4.3.12
Gunakan anotasi @propertysource untuk mengimplementasikan file konfigurasi khusus dan override konfigurasi
@Configurationproperties@configurationpublic kelas DemoproPerties {// properti dengan getter/setters} @PropertySource (value = {"test.properties", "file: /etc/test.properties",}, ignoreresourcenotfound = true) @configurationpublic kelas demoproperies kelas {@Autowired; @PostConstruct public void init () {System.out.println (DemoProPerties); }}Dukungan Spring Memperkenalkan file konfigurasi khusus menggunakan anotasi propertiSource, di mana "test.properties" akan menyebabkan pegas memuat file dari classpath, "file: /etc/test.properties" akan menyebabkan spring memuat file configury dari file yang tidak terkecap.
Pada saat yang sama, karena "file: /etc/test.properties" terletak setelah "test.properties", ini memungkinkan file konfigurasi sistem file untuk menimpa konfigurasi di bawah ClassPath.
Pabrik Sumber Properti Kustom
Jika Anda ingin menyesuaikan sumber properti yang lebih fleksibel, seperti memuat konfigurasi dari layanan konfigurasi terpusat, Anda dapat mengimplementasikan antarmuka PropertiesSourceFactory dan mengkonfigurasi parameter pabrik dari anotasi Source Properti.
@Configuration@propertysource (value = ""/*placeholder*/, factory = compositepropertysourceFactory.class) kelas publik compositeconfigAutoconfiguration {}Bidang nilai digunakan untuk menentukan file sumber daya yang sesuai dengan sumber konfigurasi. Jika file sumber daya tidak diperlukan, itu dapat dikonfigurasi sebagai nilai apa pun. Nilai parameter akan diteruskan ke metode createPropertySource dari parameter pabrik.
Jika bidang IgnoreresourCenotfound ditentukan sebagai benar, pengecualian yang dilemparkan oleh pabrik akan diabaikan, jika tidak, itu akan menyebabkan startup gagal. Terkadang, ini adalah praktik yang baik untuk secara langsung mengekspos kegagalan startup.
Definisi antarmuka propertysourceFactory adalah sebagai berikut:
/*** Antarmuka strategi untuk membuat pembungkus {@link PropertiesSource} berbasis sumber daya. * * @author juergen hoeller * @since 4.3 * @see defaultPropertySourceFactory * /antarmuka publik propertiSourceFactory { /** * Buat {@link propertiesSource} yang membungkus sumber daya yang diberikan. * @param Nama nama sumber properti * @param Resource Sumber daya (berpotensi dikodekan) untuk membungkus * @return {@link PropertieSource} baru (never {@code null}) * @throws IoException jika resolusi sumber daya gagal */ propertiesource <?> createProperty name, encRowEcRECOUCECOURECECOURECECOURE (?> createProperty name, enchowCeRECEON, NAME, NAME, NAME, NAME, NAMA SINECRECEON (?Perlu dicatat bahwa waktu pemuatan properti -sumber lebih awal dari wadah kacang pegas, sehingga implementasinya tidak dapat bergantung pada IOC musim semi.
PropertySourceFactory mensyaratkan kelas implementasi untuk mengembalikan Soursource Properti. PropertySource adalah antarmuka inti fungsi Properti Spring (atau konfigurasi), dan memiliki banyak implementasi, seperti:
Kelas implementasi aktual jauh lebih rendah daripada ini. Untuk tujuan tertentu, Anda dapat membaca dokumentasi pegas atau kode sumber.
Mappropertysource dan CompositEpropertySource umumnya digunakan saat menyesuaikan sumber properti.
Mappropertysource dapat digunakan untuk membungkus data properti yang dimuat sendiri, merujuk pada metode konstruksinya.
publik mappropertysource (nama string, peta <string, objek> sumber) {super (name, source);}Yang terakhir dapat memuat beberapa sumber atribut dengan menggabungkan dan menyesuaikan pesanan override. Misalnya:
PropertiesSource <?> PackageInsidepropertySource = PackageInIdePropertySourceIterAdoader.LoadPropertySource (CompositEpropertySource); compositePropertySource.addPropertySource(packageInsidePropertySource);PropertySource<?> outerFilePropertySource = outerFilePropertySourceIterateLoader.loadPropertySource(compositePropertySource);// The priority is higher than the former compositepropertysource.addfirstpropertysource (outerfilepropertysource);
Metode AddFirstPropertySource dapat mengatur properti yang masuk ke prioritas tertinggi (di dalam komposisi ini Source), dan metode addPropertySource adalah sebaliknya, dan prioritasnya lebih rendah sesudahnya.
Muat semua file konfigurasi dengan nama yang sama di paket JAR dependensi
Memuat file konfigurasi langsung dari ClassPath mensyaratkan bahwa file harus ada di ClassPath. Pertimbangkan dalam proyek web, jika file ada dalam paket JAR ketergantungan, yaitu, itu terletak di web-inf/lib/xxx.jar, tidak dapat dimuat secara langsung berdasarkan ClassPath. Pada saat ini, Anda dapat menggunakan PathMatchingResourcePatternResolver yang disediakan oleh Spring untuk memindai semua paket toples dengan nama sumber daya untuk mencapai tujuan.
Daftar Pribadi <Serayat> getPackageInsideresourcesByPattern (String Resourcename) melempar IoException {String ResourcePathPattern = ResourcePatternResolver.classpath_all_url_prefix + hboOtconfigConstants.configs + Resourcename; ResourcePatternResolver ResourcePatternResolver = baru PathMatchingResourcePatternResolver (); return arrays.aslist (ResourcePatternResolver.GetResources (ResourcePathPattern));} Kemudian Anda dapat menggunakan sumber daya sumber daya untuk membangun properti sumber daya dari sumber daya ke lulus ke musim semi.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.