Spring Boot menyediakan dua file konfigurasi yang umum digunakan, yaitu file properti dan file YML. Fungsinya adalah untuk memodifikasi nilai default konfigurasi otomatis boot pegas. Dibandingkan dengan file properti, file YML lebih muda dan memiliki banyak jebakan. Dapat dikatakan bahwa Xiao ia berhasil dan gagal Xiao He. YML menentukan hubungan hierarki melalui spasi, yang merupakan struktur file konfigurasi dan jelas, tetapi juga akan menghancurkan hubungan hierarki karena ruang yang tidak signifikan. Bab ini berfokus pada sintaks YML dan mengambil nilai dari file konfigurasi. Apa yang kamu tunggu? Datang dan pelajari dengan cepat!
Teknologi: YAML, Sintaks Properti, Penggunaan ConfulationProperties dan Nilai Anotasi, Penggunaan Placeholder File Konfigurasi
Catatan: Bab ini berfokus pada sintaks YAML dan penggunaan anotasi ConfulationProperties. Harap pindah ke GitHub untuk kode pengujian dan kode lengkap. Teman -teman yang menyukainya dapat mengklik bintang.
Kode Sumber: https://github.com/itdragonblog/daydayup/tree/master/springboot/spring-boot-myml
Struktur Direktori Artikel:
1. Pengantar Yaml
YML adalah file dalam bahasa YAML (YAML Ain't Markup Language), yang berpusat pada data dan lebih cocok untuk file konfigurasi daripada JSON, XML, dll.
Dibandingkan dengan XML, YML memiliki kode yang lebih sedikit, membuat data lebih langsung dan jelas sekilas.
Bagaimana dengan YML dan JSON? Tidak ada yang baik atau buruk, yang tepat adalah yang terbaik. Sintaks YML elegan dari JSON, dengan anotasi yang lebih standar, dan cocok untuk file konfigurasi. Sebagai format pertukaran mesin, JSON lebih kuat dari YML dan lebih cocok untuk pertukaran data untuk panggilan API.
1) Sintaks YAML
Kontrol hubungan hierarkis dengan tingkat lekukan ruang. Jumlah ruang tidak penting, selama ruang di sebelah kiri selaras, mereka dianggap memiliki tingkat yang sama. Perhatikan bahwa tab tidak dapat digunakan sebagai pengganti spasi. Dan Sensitif Kasus. Ini mendukung tiga struktur data: nilai literal, objek, dan array, dan juga mendukung struktur komposit.
Nilai literal: string, tipe boolean, nilai numerik, tanggal. String tidak dikutip secara default, dan satu kutipan akan luput dari karakter khusus. Format tanggal mendukung yyyy/mm/dd hh: mm: ss
Objek: terdiri dari pasangan nilai kunci, data dalam bentuk kunci: (ruang) nilai. Ruang setelah usus besar diperlukan. Setiap set pasangan nilai kunci menempati satu baris dan tingkat lekukan harus konsisten. Anda juga dapat menggunakan metode penulisan in-line: {k1: v1, .... kn: vn}
Array: terdiri dari data dengan bentuk -(ruang) nilai. Ruang di belakang garis horizontal pendek diperlukan. Setiap set data menempati satu baris dan tingkat lekukan harus konsisten. Anda juga dapat menggunakan metode penulisan in-line: [1,2, ... n]
Struktur Komposit: Kombinasi apa pun dari tiga struktur data di atas
Ii) Aplikasi YAML
Buat Aplikasi File Konfigurasi Global Spring Boot.yml, dan konfigurasikan parameter properti. Ada terutama string, string dengan karakter khusus, jenis boolean, nilai, koleksi, koleksi in-line, objek in-line, dan objek koleksi.
yaml: str: string dapat tanpa kutipan khusus: "kutipan ganda langsung output /n Karakter Khusus" Specialstr2: 'Kutipan tunggal dapat melarikan diri /n Karakter Khusus' Bendera: False NUM: 666 DNUM: 88.88 Daftar: - satu - dua set: [1,2,2,3] Peta: {K1: V1, K2: V2}: [12,2,3] Peta: {K1: V1, K2: V2}: [12,2,3] Peta: {K1: V1, K2: V2} ITDRagonBlog Gaji: 18888.88Buat entitas kelas yamlentity.java Dapatkan nilai properti dalam file konfigurasi, dapatkan nilai yang ditentukan dalam file konfigurasi dengan menganotasi @configurationproperties dan menyuntikkannya ke kelas entitas. Silakan lanjutkan untuk melihat metode pengujian spesifiknya dan prinsip memperoleh nilai!
impor org.springframework.boot.context.properties.configurationproperties; impor org.springframework.stereotype.component; impor Java.util.list; impor java.util.map; poin -poin 1. Nilai * 2. Jumlah spasi di sisi kiri setiap parameter garis menentukan level parameter, dan tidak masuk secara acak. */@Component@configurationproperties (prefix = "yaml") kelas publik yamlentity {// nilai literal, string, boolean, numerik string string str; // String Normal String Private Specialstr; // Escape Special String Private String Specialstr2; // Output String Spesial Bendera Private Boolean; // boolean tipe integer private num; // Integer private double dnum; // desimal // array, daftar dan set, dua cara untuk menulis: yang pertama: - Nilai ruang, setiap nilai menempati satu baris, dan perlu di -indentasi dan selaras; Yang kedua: [1,2, ... n] Daftar Privat Menulis <Object> In-line; // Daftar RET TET UNTUK PRIVATE SET <PERBICARA> SET; // Set tidak dapat diulang set // kelas peta dan entitas, dua cara untuk menulis: yang pertama: nilai ruang utama, setiap nilai menempati satu baris, dan perlu diindentasi dan disejajarkan; yang kedua: {key: value, ....} in-line menulis peta pribadi <string, objek> peta; // Peta KV Private List <Position> Posisi; // Struktur Senyawa, Objek Koleksi // Hilangkan Getter, Setter, Metode ToString}3) Ringkasan YML
1. String bisa tanpa kutipan. Jika kutipan ganda ditambahkan, karakter khusus akan menjadi output. Jika tidak ada kutipan tunggal yang ditambahkan, karakter khusus akan dilolos;
2. Untuk jenis array, harus ada spasi di belakang garis horizontal pendek; Untuk tipe objek, harus ada ruang di belakang usus besar;
3. YAML mengontrol hubungan hierarkis berdasarkan tingkat lekukan ruang, tetapi kunci tab tidak dapat digunakan sebagai pengganti spasi, dan itu peka huruf besar -kecil;
4. Bagaimana cara membuat programmer crash? Tambahkan beberapa ruang ke file YML! (〃> piring <)
2. Pengantar properti
Semua orang sering menggunakan file properti, jadi saya akan memperkenalkannya secara singkat di sini. Struktur sintaksnya seperti: key = nilai. Perhatikan masalah kode kacau Cina dan perlu ditranskode ke ASCII. Dengan rincian sebagai berikut:
userInfo.account = itdragonBloguserInfo.age = 25UserInfo.active = trueUserInfo.created-date = 2018/03/31 16: 54: 30UserInfo.map.k1 = v1userinfo.map.k2 = v2userinfo.lise = threadinfo.map.k2 = v2userinfo.list = threadinfo.map.k2 = v2userinfo.list = threeperserfo.map.k2 = v2userinfo.list = threadinfo.map.k2 = v2Userinfo.list = threadinfo.map.k2 = v2Userinfo.list = threeperserfo.map.k2 = v2userinfo.list = ThreeMerfo userinfo.position.salary = 19999.99
Ambil nilai dari file konfigurasi dan suntikkannya ke kelas entitas, yang sama dengan YAML.
impor org.springframework.boot.context.properties.configurationproperties; impor org.springframework.stereotype.component; import java.util.date; impor java.util.list; impor java.util.map;/** informasi pengguna file konfigurasi (nilainya ditemukan melalui awalan)*/@component@configurationproperties (prefix = "userInfo") kelas publik userInfo {private string akun; usia bilangan bulat pribadi; Private Boolean Active; Tanggal Pribadi dibuat; peta pribadi <string, objek> peta; Daftar Privat <PERBICARA> DAFTAR; posisi posisi pribadi; // hilangkan Getter, Setter, Metode ToString}3. Nilai file konfigurasi
Spring Boot mendapatkan properti dari file konfigurasi melalui anotasi ConfigurationProperties. Dari contoh di atas, kita dapat melihat bahwa anotasi ConfigurationProperties dapat menentukan data yang perlu diimpor dalam batch dengan mengatur awalan. Mendukung mendapatkan data kompleks seperti literal, koleksi, peta, objek, dll. Apakah ada hal lain tentang anotasi konfigurasi konfigurasi? Apa perbedaan antara itu dan anotasi nilai Spring? Dengan pertanyaan ini dalam pikiran, mari kita terus melihat ke bawah. (๑ • ̀ㅂ • ́) و✧
A) Pro dan kontra dari ConfigurationProperties dan Nilai
Pro dan kontra anotasi konfigurasi konfigurasi
1. Anda dapat menghubungkan properti suntikan dari file konfigurasi;
2. Mendukung mendapatkan tipe data yang kompleks;
3. Persyaratan untuk mencocokkan nama atribut rendah, seperti nama pengguna, user_name, nama pengguna, dan user_name semuanya bisa mendapatkan nilai;
4. Mendukung verifikasi data JSR303 JAVA;
5. Kerugiannya adalah tidak mendukung ekspresi spel yang kuat;
Keuntungan dan kerugian dari anotasi nilai justru sebaliknya. Ini hanya dapat mengonfigurasi nilai injeksi satu per satu; itu tidak mendukung tipe data yang kompleks seperti array dan koleksi; itu tidak mendukung verifikasi data; Ini memiliki persyaratan ketat untuk pencocokan nama properti. Fitur terbesar adalah mendukung ekspresi SPEL, menjadikannya fungsi yang lebih kaya.
2) @configurationproperties penjelasan terperinci
Langkah 1: Ketergantungan Impor. Untuk menggunakan anotasi ConfigurationProperties, Anda perlu mengimpor ketergantungan pegas-boot-konfigurasi-prosesor;
Langkah 2: Mengkonfigurasi data. Dalam file konfigurasi application.yml, konfigurasikan parameter atribut, diawali oleh iTdragon, dan parameter memiliki nilai dan array literal, yang digunakan untuk menentukan apakah kemampuan untuk mendapatkan atribut kompleks didukung;
Langkah 3: Cocokkan data. Tambahkan Konfigurasi Konfigurasi Anotasi pada kelas dan atur nilai properti awalan ke ITDRAGON. Dan tambahkan kelas ini ke wadah IOC Spring.
Langkah 4: Verifikasi data. Tambahkan verifikasi data anotasi yang divalidasi, aktifkan verifikasi data, dan uji apakah itu mendukung verifikasi data;
Langkah 5: Uji apakah Anotasi Konfigurasi Konfigurasi Mendukung Ekspresi SPEL;
Dependensi Impor: Pom.xml Tambahkan Dependensi Prosesor Konfigurasi Spring-Boot
<dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-konfigurasi-prosesor </artifactId> <pilihan> true </opsional> </dependency>
Data Konfigurasi: Parameter Properti Konfigurasi Application.yml, nama panggilan digunakan untuk menilai kelonggaran properti yang cocok. Jika diubah menjadi nick_name, Anda masih bisa mendapatkan nilainya.
Itdragon: Nick-name: ItdragonBlog Email: [email protected] iPhone: 1234567890 Kemampuan: [java, sql, html] dibuat_date: 2018/03/31 15:27:30
Cocokkan dan verifikasi data:
impor org.springframework.boot.context.properties.configurationproperties; impor org.springframework.stereotype.component; impor org.springframework.validation.annotation.valideded; Impor Javax.validation.constraints.email; Javax.validation.constraints.email; * ConfigurationProperties Annotation Syntax Class * Langkah 1: Impor Ketergantungan Spring-Boot-Konfigurasi-Prosesor; * Langkah 2: Tambahkan kelas yang dimodifikasi dengan anotasi ConfigurationProperties ke wadah IOC Spring; * Langkah 3: Atur atribut awalan dan tentukan awalan yang perlu disuntikkan; * Langkah 4: Tambahkan anotasi verifikasi data untuk memungkinkan verifikasi data; * * Note: * 1. nickName and createdDate are in the yml configuration file, and the corresponding parameters are meshes and underscores, respectively, used to test their looseness of matching attribute names* 2. Email and iPhone test that supports JSR303 data verification* 3. abilities test that supports complex data structures*/@Component@ConfigurationProperties(prefix = "itdragon")@Validatedpublic class ConfigurationPropertiesEntity {Private String NickName; // Parsing berhasil, mendukung atribut pencocokan longgar email string pribadi; // @email // parsing gagal, dan verifikasi data berhasil: BindValidationException: mengikat kesalahan validasi pada iTdragon Private String iPhone; Daftar Pribadi <string> Kemampuan; Tanggal Pribadi dibuat; // Parsing berhasil, mendukung atribut pencocokan longgar // @configurationproperties ("#{(1+2-3)/4*5}") operator string pribadi; // Kesalahan Sintaks, Tidak Mendukung Ekspresi SPEL: Tidak berlaku untuk Field // Omit Getter, Setter, ToString Metode}3) Penjelasan terperinci @Value
Blog sebelumnya telah memperkenalkan penggunaan anotasi nilai, dan di sini adalah penjelasan singkat.
Langkah 1: Tambah nilai anotasi ke atribut dan suntikan nilai dari file konfigurasi melalui parameter pengaturan $ {};
Langkah 2: Ubah nilai parameter di $ {itdragon.ceatred_date} dan ubah menjadi $ {itdragon.ceatredDate} untuk menguji apakah parsing dapat berhasil;
Langkah 3: Tambahkan verifikasi data anotasi yang divalidasi, aktifkan verifikasi data, dan uji apakah itu mendukung verifikasi data;
Langkah 4: Uji apakah anotasi nilai mendukung ekspresi SPEL;
impor org.springframework.beans.factory.annotation.value; impor org.springframework.stereotype.sponent; impor org.springframework.validation.annotation.validated; valasi; javax. Sintaks kelas* Langkah 1: Tambahkan parameter injeksi nilai anotasi pada atribut* Langkah 2: Tambahkan kelas yang dimodifikasi oleh anotasi nilai ke wadah IOC pegas; * Langkah 3: Tambahkan anotasi verifikasi data untuk memeriksa apakah verifikasi data didukung; * * Catatan Poin: * 1. Nama panggilan dan ciptaan dalam file konfigurasi YML, parameter yang sesuai masing -masing adalah jerat dan garis bawah, masing -masing, digunakan untuk menguji kelonggaran mereka dengan nama atribut yang cocok * 2. Email dan uji iPhone yang mendukung verifikasi data JSR303 * 3. Kemampuan uji yang mendukung Struktur Data Kompleks * * Kesimpulan: * 1. file. * 2. Karena itu adalah menambahkan anotasi verifikasi kotak surat pada iPhone, Anda masih dapat lulus tes. * 3. @Value ("$ {itdragon.email}") email string pribadi; @Email @value ("$ {itdragon.iphone}") // parsing berhasil dan verifikasi data tidak didukung iphone string pribadi; // @value ("$ {itdragon.eatredDate}") // Parsing adalah kesalahan, struktur data yang kompleks tidak mendukung daftar pribadi <string> daya tarik; // kesalahan parsing, tidak mendukung properti yang cocok dengan longgar, dan harus benar -benar konsisten tanggal pribadi dibuat; // Sisi anotasi nilai yang kuat: mendukung ekspresi spel @Value ("#{(1+2-3)/4*5}") // Operasi Aritmatika Operator String Privat; @Value ("#{1> 2 || 2 <= 3}") // Operasi Relasional Perbandingan Boolean Pribadi; @Value ("#{SystemProperties ['java.version']}") // Konfigurasi sistem: os.name Private String SystemProperties; @Value ("#{t (java.lang.math) .abs (-18)}") // ekspresi string private mapExpression; // hilangkan Getter, Setter, Metode ToString}4) Ringkasan nilai file konfigurasi
1. Konfigurasi Anotasi mendukung injeksi batch, sedangkan anotasi nilai cocok untuk injeksi tunggal;
2. Anotasi Konfigurasi Konfigurasi mendukung verifikasi data, sedangkan anotasi nilai tidak;
3. Anotasi Konfigurasi Konfigurasi mendukung properti pencocokan yang longgar, sedangkan anotasi nilai harus benar -benar cocok dengan properti;
4. ConfigurationProperties tidak mendukung ekspresi SPEL yang kuat, tetapi nilai mendukungnya;
4. Placeholder File Konfigurasi
Placeholder dan nomor acak relatif sederhana, jadi saya akan memposting kode di sini secara langsung. Apa yang harus dicatat adalah:
1. Nilai placeholder harus menjadi jalan lengkap
2. Tetapkan nilai default dari placeholder, tidak boleh ada ruang setelah usus besar
RAN: # awalan di sini tidak bisa acak, ran-value: $ {random.value} ran-int: $ {random.int} ran-long: $ {random.long} ran-int-num: $ {random.int (10)} ran-int-range: $ {random.int [10.20]} ran-ran: ran-ran-rang: $ {random.int [10.20]} ran-ran: ran-ran-ran: $ {10.int {12) Placeholder _ $ {ran.ran-value: tidak mungkin ada spasi di sini, dan kuncinya adalah jalur lengkap} impor org.springframework.boot.context.properties.configurationproperties; impor org.springframework.stereotype./*** nomor acak dan placeholder class sintaks*/@component@configurationproperties (awalan = "ran") kelas public class {class randum {randum public class {private {rander {rane ") // Hasilkan secara acak string Private Integer Ranint; // secara acak menghasilkan integer pribadi Ranlong; // secara acak menghasilkan bilangan bulat bilangan bulat bilangan bulat panjang Ranintnum; // secara acak menghasilkan integer pribadi dalam kisaran yang ditentukan integer ranintrange; // secara acak menghasilkan integer string pribadi ranplaceHolder; // placeholder // empuk getter, setter, metode tostring e} test class @runwith (springrunner.class) @springboottestspensplic class @runbootslic {springrunner.class) @springboottestplic Class Public Public Public Public (springrunner.class) @springboottplic Class {springrunner) @springbootplic userinfo; @Autowired Private Yamlentity Yamlentity; @Autowired Private ConfigurationPropertiesEnterity ConfigurationPropertiesEntity; @Autowired Private ValueEntity ValueStity; @Autowired Private RandomEntity RandomEntity; @Test public void contextLoads () {// System.out.println ("YAML Grammar:" + yamlentity); // system.out.println ("userInfo:" + userInfo); // System.out.println ("ConfigurationProPerties Grammar:" + Configuration "PRIGROPERT.PROPERTY (" ConfigurationPROPERTIES: " + Configuration," +ProperN.PRINTIONT.PROPERTIES. + valueEntity); System.out.println ("Tata Bahasa Acak:" + AcandEntity); }}5. Ringkasan
1. Spring Boot mendukung file konfigurasi dalam dua format, di antaranya struktur data YAML lebih jelas dari properti.
2. YAML adalah bahasa yang digunakan khusus untuk menulis file konfigurasi, yang sangat ringkas dan kuat.
3. YAML memiliki persyaratan ketat pada ruang dan tidak dapat diganti dengan kunci tab.
4. YAML menentukan level berdasarkan tingkat indentasi ruang, dengan spasi mengikuti usus besar dan spasi mengikuti garis horizontal pendek.
5. Anotasi ConfigurationProperties cocok untuk injeksi batch properti dalam file konfigurasi, dan anotasi nilai cocok untuk mendapatkan item dalam file konfigurasi.
6. Anotasi Konfigurasi Konfigurasi Dukungan Data Checksum Untuk mendapatkan data yang kompleks, dan nilai anotasi mendukung ekspresi SPEL.
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.