Jika Anda belum membaca konten di atas, Anda dapat membacanya jika Anda tertarik. Dalam artikel di atas menggunakan JDBCtemplate, tabel pengguna terutama ditambahkan, dihapus, dimodifikasi dan diperiksa melalui JDBCtemplate yang disediakan oleh Spring. Saat menerapkan contoh ini, kami membuat tabel pengguna di MySQL terlebih dahulu. Kami sering menggunakan proses membuat tabel saat benar -benar mengembangkan sistem, tetapi selalu ada masalah. Karena versi program suatu sistem dikontrol dengan baik melalui GIT, dan struktur basis data tidak. Bahkan jika kami pernyataan versi melalui GIT, cara mengelola versi dalam database setiap lingkungan? Selanjutnya, kita akan belajar cara menggunakan Flyway untuk mengelola versi basis data di Spring Boot melalui artikel ini.
Pengantar Flyway
Flyway adalah pengontrol versi basis data open source sederhana (konvensi lebih besar dari konfigurasi), yang terutama menyediakan migrasi, bersih, info, validasi, baseline, perbaikan dan perintah lainnya. Ini mendukung metode SQL (PL/SQL, T-SQL) dan Java, mendukung klien baris perintah, dll., Dan juga menyediakan serangkaian dukungan plug-in (Maven, Gradle, SBT, ANT, dll.).
Situs web resmi: https://flywaydb.org/
Artikel ini tidak terlalu memperkenalkan fungsi Flyway sendiri. Pembaca dapat memperoleh informasi lebih lanjut dengan membaca dokumen resmi atau menggunakan mesin pencari. Di bawah ini kita akan berbicara tentang aplikasi dalam aplikasi Spring Boot secara rinci, cara menggunakan Flyway untuk membuat database dan memeriksa struktur secara tidak konsisten.
Cobalah
Di bawah ini kita dapat menyelesaikan pemrosesan dengan menggunakan contoh dalam artikel menggunakan JDBCtemplate. Pembaca juga dapat menggunakan proyek apa pun yang terkait dengan akses data untuk bereksperimen dengan konten berikut:
Langkah pertama adalah menambahkan ketergantungan Flyway di pom.xml:
<dependency> <GroupId> org.flywaydb </groupid> <ArTifactId> flyway-core </arttifactid> <version> 5.0.3 </version> </gandendency>
Langkah kedua adalah membuat skrip SQL versi sesuai dengan spesifikasi Flyway.
Buat direktori DB di bawah direktori SRC/Utama/Sumber Daya
Buat skrip SQL versi v1__base_version.sql di direktori db
Tabel drop jika ada pengguna; buat tabel `user` (` id` bigint (20) bukan null auto_increment komentar 'kunci primer', `name` varchar (20) bukan komentar null 'name',` Age` int (5) Default null Comment 'Usia', kunci utama (`id`)) engine = innodb default charset = UMSE = UMUR.
Langkah ketiga adalah mengonfigurasi lokasi skrip SQL yang akan dimuat dalam file application.properties. Hasil yang dibuat pada langkah kedua adalah sebagai berikut:
flyway.locations = classpath:/db
Langkah keempat adalah menjalankan unit uji applicationTests. Saat ini, kita dapat melihat informasi berikut di log:
INFO 82441 --- [main] ofcore.internal.util.VersionPrinter : Flyway Community Edition 5.0.3 by BoxfuseINFO 82441 --- [main] ofcinternal.database.DatabaseFactory : Database: jdbc:mysql://localhost:3306/test (MySQL 5.7)INFO 82441 --- [main] Ofcore.Internal.Command.DBValidate: berhasil divalidasi 1 migrasi (waktu eksekusi 00: 00.022s) Info 82441 --- [utama] Main.Internal.Command.DBValidate: Berhasil divalidasi 1 migrasi (waktu eksekusi 00: 00: 00.022s) Info 824444444444444444444444444444444444444444444444444444444 Schema History table: `test`.`flyway_schema_history`INFO 82441 --- [main] ofcore.internal.command.DbMigrate : Current version of schema `test`: << Empty Schema >>INFO 82441 --- [main] ofcore.internal.command.DbMigrate : Migrating schema `test` to version 1 - Base versionWARN 82441 --- [utama] ofcore.internal.sqlscript.sqlscript: DB: Tabel tidak diketahui 'test.user' (SQL State: 42S02-Kode Kesalahan: 1051) Info 82441 --- [Main] dari Core.
Flyway memantau bahwa perlu menjalankan skrip versi untuk menginisialisasi database, sehingga menjalankan skrip v1__base_version.sql, sehingga membuat tabel pengguna, yang memungkinkan serangkaian tes unit (operasi CRUD pada tabel pengguna) untuk dilewati.
Pada langkah kelima, kita dapat terus menjalankan tes unit, dan pada saat ini kita akan menemukan bahwa output log berbeda dari sebelumnya:
INFO 83150 --- [main] ofcore.internal.util.VersionPrinter : Flyway Community Edition 5.0.3 by BoxfuseINFO 83150 --- [main] ofcinternal.database.DatabaseFactory : Database: jdbc:mysql://localhost:3306/test (MySQL 5.7)INFO 83150 --- [main] Ofcore.Internal.Command.DBValidate: berhasil divalidasi 1 migrasi (waktu eksekusi 00: 00.031S) Info 83150 --- [utama] ofcore.internal.Command.DBValidate: berhasil divalidasi (Execution Time 00: 00.031S) Info 83150-OFER-OFER (00: 00: 00.031S) Info 83150-OFOM. Versi saat ini dari skema `tes`: 1info 83150 --- [main] ofcore.internal.command.dbmigrate: skema` test` up to date. Tidak perlu migrasi.
Karena skrip inisialisasi telah dieksekusi pada langkah keempat, kali ini eksekusi tidak menjalankan skrip v1__base_version.sql untuk membangun kembali tabel pengguna.
Pada langkah keenam, kita dapat mencoba memodifikasi panjang bidang nama di skrip v1__base_version.sql, dan kemudian jalankan uji unit, kita bisa mendapatkan kesalahan berikut:
ERROR 83791 --- [main] osboot.SpringApplication : Application startup failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of Metode init gagal; Pengecualian bersarang adalah org.flywaydb.core.api.flywayException: Validasi Gagal: Ketidakcocokan Pemeriksaan Migrasi untuk Migrasi Versi 1-> Diterapkan pada Basis Data: 466264992-> Diselesaikan secara lokal: -270269434
Karena perubahan dalam skrip inisialisasi, verifikasi terbang gagal. Dipercayai bahwa skrip v1__base_version.sql saat ini berbeda dari konten terakhir yang dieksekusi, mendorong kesalahan dan mengakhiri program untuk menghindari menyebabkan kerusakan struktur data yang lebih serius.
Meringkaskan
Sejauh ini, konten artikel ini telah berakhir. Karena panjang posting blog, saya tidak banyak bicara tentang penggunaan Flyway secara lebih rinci. Artikel ini terutama digunakan sebagai batu loncatan untuk membantu dan memandu individu atau tim yang menggunakan boot musim semi untuk melakukan lebih baik dalam kontrol versi database. Adapun aplikasi yang lebih mendalam, silakan baca dokumen resmi untuk referensi dan studi.
Kode artikel ini: GitHub: https://github.com/dyc87112/springboot-learning/
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.