Kata pengantar
Artikel ini akan fokus pada menjelaskan penggunaan anotasi @propertysource di musim semi dan cara memuat file konfigurasi yang ditentukan melalui anotasi propertiSource. Ini juga menggunakan anotasi properti dan anotasi @ConfigurationProperties. Saya tidak akan banyak bicara di bawah ini, mari kita belajar dan belajar dengan editor.
1.1. Anotasi PropertiesSource memuat file properti yang ditentukan
Spring Framework menyediakan anotasi propertiSource, dengan tujuan memuat file properti yang ditentukan. Selanjutnya, mari kita lihat cara menggunakan anotasi ini. Pertama kami mendefinisikan kelas konfigurasi dan menambahkan anotasi properti ke kelas sebagai berikut:
@Component@PropertySource(value= {"classpath:config/jdbc-bainuo-dev.properties"},ignoreResourceNotFound=false,encoding="UTF-8",name="jdbc-bainuo-dev.properties",)public class CustomerDataSourceConfig1 {private String url; Public String getUrl () {return url; } public void setUrl (string url) {this.url = url; } @Override public string toString () {return "customerDataSourCeConfig {" + "url = '" + url +'/'' + '}'; }} Tujuan dari kode di atas adalah untuk memuat jdbc-bainuo-dev.properties dalam file config di jalur classpath. Di mana pengkodean digunakan untuk menentukan pengkodean yang digunakan untuk membaca file properti, kami biasanya menggunakan UTF-8; Ignoreresourcenotfound berarti apakah kesalahan dilaporkan ketika file konfigurasi yang ditentukan tidak ada, dan standarnya salah; Misalnya, file properti pemuatan yang ditentukan di atas adalah jdbc-bainuo-dev.properties . Jika file tidak ada, program tidak akan melaporkan kesalahan ketika IgnoreresourCenotFound benar. Jika IgnoreresourCenotFound salah, program akan melaporkan kesalahan secara langsung. Dalam pengembangan proyek yang sebenarnya, yang terbaik adalah mengatur IgnoreresourCenotfound menjadi false. Nilai default parameter ini salah.
Nilai nilai adalah untuk mengatur file atribut yang akan dimuat, dan beberapa properti dapat dimuat pada satu waktu. Nilai nama yang kami tetapkan adalah jdbc-bainuo-dev.properties . Nilai ini harus unik di lingkungan Springboot, jika tidak diatur, nilainya adalah: " class path resource [config/jdbc-bainuo-dev.properties] ".
Banyak orang mungkin bertanya-tanya mengapa itu adalah " class path resource [config/jdbc-bainuo-dev.properties] "? Ini melibatkan sumber daya kelas enkapsulasi di Spring untuk file sumber daya. Nilai yang kami konfigurasi di atas adalah " classpath:config/jdbc-bainuo-dev.properties ", jadi Spring menemukan bahwa itu dimulai dengan ClassPath, jadi ujungnya menggunakan Subkelas ClassPathResource. Jika dimulai dengan file, kelas yang akhirnya Anda gunakan adalah fileSystemResource.
Setelah memahami kelas sumber daya yang dijelaskan di atas. Mari kita jelaskan lagi bahwa jika nilai nama tidak diatur dalam @PropertySource, aturan generasi nilai nama adalah: Temukan subkelas sumber daya yang dienkapsulasi akhir berdasarkan nilai nilai, dan kemudian panggil metode getDescription dalam objek instance subkelas sumber daya tertentu. Nilai pengembalian metode getDescription adalah nilai nama akhir.
Misalnya, metode getDescription di kelas ClassPathResource diimplementasikan sebagai berikut:
Public String getDescription () {StringBuilder builder = new StringBuilder ("Class Path Resource ["); String pathtouse = path; if (this.clazz! = null &&! Pathtouse.startswith ("/")) {builder.applappend (classutils.classpackageAsResourcepath (this.clazz)); builder.append ('/'); } if (pathtouse.startswith ("/")) {pathtouse = pathtouse.substring (1); } builder.append (pathtouse); builder.append (']'); return builder.toString ();} Logika pemrosesan nama di atas dapat dikesankan untuk sementara, dan kode sumber akan dilacak secara rinci untuk penjelasan di masa depan.
1.2. Anotasi Source PropertySource memuat uji file properti yang ditentukan
Pada hal di atas, kami mengatur anotasi propertiSource untuk memuat file "classpath:config/jdbc-bainuo-dev.properties" . Struktur direktori file ini ditunjukkan pada gambar di bawah ini:
Konten file JDBC-BAINUO-DEV.Properties adalah sebagai berikut:
spring.datasource.shareniu.url = shareniu
Isi file application.properties adalah sebagai berikut:
spring.profiles.active = dev
Dalam file konfigurasi di atas, properti spring.profiles.active mengkonfigurasi lingkungan saat ini yang digunakan adalah dev. spring.datasource.shareniu.url hanyalah properti biasa dan tidak memiliki makna khusus dalam dirinya sendiri.
Mari kita mulai menulis kelas startup Springboot sebagai berikut:
@SpringbootApplicationPublic Class DemoApplication {public static void main (string [] args) {springApplication springApplication = new springApplication (demoApplication.class); ConfigurableApplicationContext ConfigurableApplicationContext = springApplication.run (args); CustomerDataSourCeConfig1 customerDataSourCeConfig = configurableApplicationContext .getBean (customerDataSourCeConfig1.class); System.out.print (customerDataSourCeConfig);}} Jalankan kode di atas dan output program adalah sebagai berikut:
CustomerDataSourCeConfig {url = 'null'} Aneh, mengapa URL kosong? Bukankah anotasi Source Properties sudah memuat file jdbc-bainuo-dev.properties ke lingkungan saat ini? Kita mungkin juga mencoba untuk melihat apakah properti spring.datasource.shareniu.url di jdbc-bainuo-dev.properties dapat diperoleh, dan kemudian memverifikasi dari sisi bahwa anotasi properti yang telah memuat file jdbc-bainuo-dev.properties ke dalam lingkungan saat ini.
Ubah kode kelas startup di atas sebagai berikut:
@SpringbootApplicationPublic Class DemoApplication {public static void main (string [] args) {springApplication springApplication = new springApplication (demoApplication.class); ConfigurableApplicationContext ConfigurableApplicationContext = springApplication.run (args); CustomerDataSourCeConfig1 customerDataSourCeConfig = configurableApplicationContext.getBean (customerDataSourCeConfig1.class); String properti = configurableApplicationContext.getEnvironment (). GetProperty ("spring.datasource.shareniu.url"); System.out.println (properti); System.out.print (customerDataSourCeConfig);}} Jalankan kode di atas dan output program adalah sebagai berikut:
Shareniu
Dari kode di atas, kita dapat melihat bahwa SourceSource memang efektif. Jadi bagaimana kami secara otomatis menyuntikkan nilai properti spring.datasource.shareniu.url ke dalam properti URL di kelas customerDataSourCeConfig1?
1.3. Anotasi PropertiesSource membaca file yang ditentukan dan menyuntikkan properti ke dalam kelas konfigurasi
Spring menyediakan anotasi @Value untuk membaca nilai atribut dalam file konfigurasi dan mengaturnya ke atribut yang sesuai. Di sini kita belajar cara menggunakan anotasi @Value. Hal yang sama berlaku untuk dua kelas dalam teks di atas sebagai contoh untuk penjelasan terperinci. Pertama, Anda perlu memodifikasi kelas CustomerDataSourCeConfig1. Bagian modifikasi adalah sebagai berikut:
@Component@propertysource (name = "jdbc-bainuo-dev.properties", value = {"classpath: config/jdbc-bainuo-dev.properties"}, ignoreresourcenotfound = false, encoding = "UTF-8") Public ClassDataSourCecececececCececececCecececCecececCececececCeCoGound = false, encoding = "UTF-8") PUBLIC CLASS CLASSESDATCECECECECECECECECOG1 = encoding = "UTF-8") PUBLIK PUBLIC CLASS CLASSESOCOCOCOCORCEG1 = FALSE, encoding = "UTF-8) @Value ("$ {spring.datasource.shareniu.url}") private string url;} Di kelas di atas, anotasi @Value ditambahkan ke bidang URL dan ekspresi SPEL ditentukan sebagai ${spring.datasource.shareniu.url} . Jalankan kelas boot Springboot lagi dan output konsol adalah Shareniu. Ini menunjukkan bahwa injeksi nilai atribut memang dapat dilakukan melalui @Value. Namun, salah satu aspek yang kurang ramah dari menggunakan metode anotasi @Value adalah bahwa ketika ada sejumlah besar properti dalam proyek untuk konfigurasi, kita perlu menambahkan anotasi @Value ke bidang kelas satu per satu, yang benar -benar sulit, tetapi kita dapat menyelesaikan masalah ini melalui anotasi @ConfigurationProperties yang disediakan oleh Springboot.
1.4. Penggunaan Anotasi Konfigurasi Konfigurasi
@ConfigurationProperties adalah anotasi tingkat kelas, dan penggunaan spesifik adalah sebagai berikut:
@Component @configurationproperties (prefix = "spring.datasource.shareniu") @propertysource (name = "jdbc-bainuo-dev.properties", value = {"classpath: config/jdbc-bainuo-dev.properties" CustomerDataSourCeConfig1 {private string url; } Dalam kode di atas, anotasi ConfigurationProperties ditambahkan ke kelas CustomerDataSourCeConfig1, dan awalan properti adalah spring.datasource.shareniu . Dengan cara ini, ketika proses springboot, ia akan memindai semua bidang di kelas saat ini dan mencari dan merakit properti. Misalnya, jika kami mengkonfigurasi prefix = "spring.datasource.shareniu" , ada bidang URL di kelas CustomerDataSourConfig1, maka atribut yang perlu dicocokkan oleh bidang URL adalah awalan+ bidang = spring.datasource.shareniu.url .
Itu bukan hanya pertanyaan? Bagaimana jika bidang yang ditentukan tidak menemukan atribut? Ini dapat dikonfigurasi sebagai berikut:
@ConfigurationProperties (prefix = "spring.datasource.shareniu", abplourknownfields = true, abaikaninvalidfields = true)
Abaikan bidang: abaikan bidang yang tidak diketahui.
Abaikan Fibalidfields: Apakah akan mengabaikan bidang yang gagal memverifikasi. Bagaimana Anda memahami ini? Misalnya, jika kami mengkonfigurasi variabel tipe string di file konfigurasi, dan bidang di kelas adalah tipe int, itu pasti akan melaporkan kesalahan. Jika ini terjadi, kita dapat mentolerir bahwa nilai properti perlu dikonfigurasi ke True. Nilai parameter ini default ke false.
Artikel ini akan menjelaskan di sini. Dalam artikel berikutnya, kami akan menjelaskan bagaimana anotasi @PropertySource dapat mewujudkan pembacaan file konfigurasi di lingkungan yang berbeda. File di lingkungan yang berbeda secara dinamis beralih ke membaca. PropertySource tidak didukung secara default, jadi kita perlu memperluas kode sumber yang sesuai dengan anotasi ini.
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.