Artikel ini memperkenalkan penggunaan Flyway untuk Springboot untuk memungkinkan migrasi basis data. Itu dibagikan dengan Anda. Dengan rincian sebagai berikut:
Pertama, izinkan saya memahami cara kerja terbang.
Solusi termudah adalah mengarahkan jalan terbang ke database kosong.
Ini akan mencoba menemukan tabel metadata. Ketika database kosong, Flyway tidak akan menemukannya, tetapi membuatnya. Anda sekarang memiliki database dengan tabel kosong tunggal bernama Schema_version:
Tabel ini akan digunakan untuk melacak keadaan database. Setelah itu, Flyway akan mulai memindai sistem file aplikasi atau classpath untuk migrasi. Mereka dapat ditulis dalam SQL atau Java.
Kemudian urutkan migrasi berdasarkan nomor versi mereka dan terapkan secara berurutan:
Karena setiap migrasi diterapkan, tabel metadata akan diperbarui sesuai:
schema_version
Dengan metadata dan keadaan awal di tempat, kita sekarang dapat berbicara tentang migrasi ke versi yang lebih baru.
Flyway akan memindai sistem file aplikasi atau ClassPath lagi untuk migrasi. Periksa migrasi terhadap tabel metadata. Jika nomor versi lebih rendah atau sama dengan nomor versi yang ditandai sebagai versi saat ini, mereka diabaikan.
Migrasi yang tersisa adalah migrasi yang tertunda: tersedia tetapi tidak diterapkan.
Kemudian, mereka mengurutkan berdasarkan nomor versi dan dijalankan secara bergantian:
Tabel metadata ini diperbarui, jadi:
schema_version
Itu saja! Setiap kali Anda perlu mengembangkan database, apakah itu struktur (DDL) atau data referensi (DML), cukup buat migrasi baru dengan nomor versi yang lebih tinggi dari versi saat ini. Lain kali Flyway dimulai, ia menemukan dan meningkatkan database yang sesuai.
2. Penggunaan jalur terbang di Springboot
Salah satu caranya adalah dengan mengatur properti hibernate.hbm2ddl.auto untuk membuat, membuat drop, atau memperbarui melalui properti Spring Boot's spring.jpa.hibernate.ddl-auto. Misalnya, untuk mengatur hibernate.hbm2ddl.auto untuk membuat drop, kami dapat menambahkan konten berikut di application.yml:
Spring: JPA: Hibernate: DDL-Auto: Create-Drop
Namun, ini tidak ideal untuk lingkungan produksi, karena setiap kali aplikasi memulai kembali database, skema akan dikosongkan dan dibangun kembali dari awal. Ini dapat diatur untuk memperbarui, tetapi meskipun demikian, kami tidak merekomendasikan menggunakannya untuk lingkungan produksi.
Ada cara lain. Kita dapat mendefinisikan skema dalam skema.sql. Pada menjalankan pertama, tidak ada masalah melakukan ini, tetapi kemudian setiap kali aplikasi dimulai, skrip inisialisasi ini gagal karena tabel data sudah ada. Ini membutuhkan perawatan ekstra saat menulis skrip inisialisasi dan tidak mengulangi pekerjaan yang telah dilakukan.
Opsi yang lebih baik adalah menggunakan pustaka migrasi basis data. Ini menggunakan serangkaian skrip database dan catatan yang telah digunakan dan tidak menggunakan skrip yang sama beberapa kali. Setiap paket penerapan aplikasi berisi skrip ini, dan database dapat konsisten dengan aplikasi. Spring Boot menyediakan dukungan konfigurasi otomatis untuk dua pustaka migrasi basis data populer.
Ketika Anda ingin menggunakan salah satu perpustakaan ini di Spring Boot, Anda hanya perlu menambahkan dependensi yang sesuai ke proyek dan menulis skrip. Mari kita mulai dengan Flyway.
1. Gunakan jalan terbang untuk menentukan proses migrasi basis data
Flyway adalah perpustakaan migrasi basis data open source yang sangat sederhana yang menggunakan SQL untuk mendefinisikan skrip migrasi. Idenya adalah bahwa setiap skrip memiliki nomor versi, dan Flyway akan menjalankan skrip ini secara berurutan untuk mendapatkan database ke keadaan yang diinginkan. Ini juga mencatat status skrip yang dieksekusi dan tidak akan diulang. Di sini, di aplikasi Daftar Baca, kami mulai dengan database kosong tanpa tabel dan data data. Oleh karena itu, skrip ini perlu membuat tabel pembaca dan buku terlebih dahulu, termasuk kendala kunci asing dan data inisialisasi. Daftar 8-2 dari kode adalah skrip terbang dari database kosong ke keadaan yang tersedia.
Skrip awal database terbang
Buat Table Reader (Kunci Primer Serial ID, Nama Pengguna Varchar (25) unik bukan nol, kata sandi varchar (25) bukan nol, fullname varchar (50) bukan nol); Buat Buku Tabel (Kunci Primer Serial ID, Penulis Varchar (50) Bukan NULL, Deskripsi Varchar (1000) Bukan null, isbn varchar (10) bukan nol, judul varchar (250) bukan nol, reader_username varchar (25) bukan nol, kunci asing (reader_username) pembaca referensi (nama pengguna)); Buat urutan hibernate_cesterence; masukkan ke dalam nilai pembaca (nama pengguna, kata sandi, fullname) ('craig', 'password', 'craig walls'); Seperti yang Anda lihat, skrip jalur terbang adalah SQL. Apa yang membuatnya berfungsi adalah lokasi dan nama file di ClassPath. Skrip terbang semua mengikuti spesifikasi penamaan, berisi nomor versi, seperti yang ditunjukkan pada Gambar 8-1.
Semua skrip terbang memiliki nama yang dimulai dengan huruf kapital V, diikuti oleh nomor versi skrip. Diikuti oleh dua garis bawah dan deskripsi skrip. Karena ini adalah skrip pertama dalam seluruh proses migrasi, versinya adalah 1. Deskripsi bisa sangat fleksibel dan terutama digunakan untuk membantu memahami tujuan skrip. Kemudian kita perlu menambahkan tabel baru ke database, atau menambahkan bidang baru ke tabel data yang ada. Anda dapat membuat skrip lain dengan versi nomor 2. Skrip Flyway perlu ditempatkan di bawah jalur /db /migrasi relatif terhadap jalur root ClassPath Application. Oleh karena itu, dalam proyek, skrip perlu ditempatkan di SRC/Main/Resources/DB/Migrasi. Anda juga perlu mengatur spring.jpa.hibernate.ddl-auto ke tidak ada, sehingga hibernate tidak membuat tabel data. Ini terkait dengan konten berikut di Application.yml:
Musim Semi: JPA: Hibernate: DDL-Auto: Tidak Ada
Yang tersisa hanyalah menambahkan jalur terbang sebagai ketergantungan proyek. Di Gradle, ketergantungan ini terlihat seperti ini:
compile ("org.flywaydb: flyway-core")Dalam proyek Maven, sepertinya ini:
<dependency> <GroupId> org.flywayfb </groupid> <ArtifactId> flyway-core </artifactid> </dependency>
Setelah aplikasi digunakan dan dijalankan, Spring Boot akan mendeteksi jalur terbang di ClassPath dan secara otomatis mengkonfigurasi kacang yang diperlukan. Flyway akan melihat skrip di /db /migrasi pada gilirannya, dan menjalankan skrip ini jika belum dieksekusi. Setelah setiap skrip dieksekusi, tulis catatan ke tabel schema_version. Lain kali aplikasi dimulai, Flyway akan terlebih dahulu melihat catatan di Schema_version dan melewatkan skrip tersebut.
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.