Gunakan Liquibase untuk Memperkembangkan Skema Pangkalan Data Anda dengan Selamat

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kami akan menggunakan Liquibase untuk mengembangkan skema pangkalan data aplikasi web Java.

Kami akan memfokuskan diri pada aplikasi Java umum terlebih dahulu, dan kami juga akan melihat beberapa pilihan menarik yang tersedia untuk Spring dan Hibernate.

Secara ringkas, teras menggunakan Liquibase adalah yang Changelog fail - fail XML yang menjejaki semua perubahan yang perlu untuk menjalankan untuk mengemaskini DB.

Mari mulakan dengan kebergantungan Maven yang perlu kita tambah ke dalam pom.xml kita :

 org.liquibase liquibase-core 3.4.1 

Anda juga boleh memeriksa sama ada terdapat versi cecair-core yang lebih baru di sini.

2. Log Perubahan Pangkalan Data

Sekarang, mari kita lihat fail changeLog sederhana - yang satu ini hanya menambah lajur " alamat " ke jadual " pengguna ":

Perhatikan bagaimana set perubahan dikenali oleh id dan pengarang - untuk memastikannya dapat dikenali secara unik dan hanya digunakan sekali.

Jangan lihat bagaimana memasukkannya ke dalam aplikasi kita dan pastikan ia berjalan semasa aplikasi dimulakan.

3. Jalankan Liquibase Dengan Spring Bean

Pilihan pertama kami untuk menjalankan perubahan pada permulaan aplikasi adalah melalui Spring bean. Sudah tentu ada banyak cara lain, tetapi jika kita berurusan dengan aplikasi Spring - ini adalah cara yang baik dan mudah untuk pergi:

@Bean public SpringLiquibase liquibase() { SpringLiquibase liquibase = new SpringLiquibase(); liquibase.setChangeLog("classpath:liquibase-changeLog.xml"); liquibase.setDataSource(dataSource()); return liquibase; }

Perhatikan bagaimana kita menunjukkannya ke fail changeLog yang sah yang perlu ada di classpath.

4. Gunakan Liquibase With Spring Boot

Sekiranya anda menggunakan Spring Boot, tidak perlu menentukan Bean for Liquibase.

Yang anda perlukan adalah memasukkan log perubahan anda di " db / changelog / db.changelog-master.yaml " dan migrasi Liquibase akan berjalan secara automatik semasa permulaan.

Perhatikan bahawa:

  • Anda perlu menambahkan ketergantungan " inti cecair ".
  • Anda boleh menukar fail log perubahan lalai menggunakan harta " liquibase.change-log " - contohnya:
liquibase.change-log=classpath:liquibase-changeLog.xml

5. Lumpuhkan Liquibase di Spring Boot

Kadang kala, kita mungkin perlu melumpuhkan pelaksanaan migrasi Liquibase semasa permulaan.

Pilihan termudah yang kita ada ialah menggunakan harta spring.liquibase.enabled . Dengan cara ini, semua konfigurasi Liquibase yang tersisa tetap tidak tersentuh.

Inilah contoh untuk Spring Boot 2:

spring.liquibase.enabled=false

Untuk Spring Boot 1.x, kita perlu menggunakan harta yang diaktifkan liquibase .

liquibase.enabled=false

6. Jana perubahanLog With Maven Plugin

Daripada menulis fail changeLog secara manual - kita boleh menggunakan plugin Liquibase Maven untuk menghasilkan satu dan menjimatkan banyak kerja.

6.1. Konfigurasi Plugin

Berikut adalah perubahan pada pom.xml kami :

 org.liquibase liquibase-maven-plugin 3.4.1  ...   org.liquibase liquibase-maven-plugin 3.4.1  src/main/resources/liquibase.properties   

6.2. Hasilkan ChangeLog Dari Pangkalan Data Sedia Ada

Kita boleh menggunakan plugin untuk Menghasilkan Changelog dari Pangkalan Data Sedia Ada:

mvn liquibase:generateChangeLog

Berikut adalah sifat cecair :

url=jdbc:mysql://localhost:3306/oauth_reddit username=tutorialuser password=tutorialmy5ql driver=com.mysql.jdbc.Driver outputChangeLogFile=src/main/resources/liquibase-outputChangeLog.xml

Hasil akhirnya adalah fail changeLog yang dapat kita gunakan untuk membuat skema DB awal atau untuk mengisi data. Begini rupa untuk aplikasi contoh kami:

                     ... 

6.3. Hasilkan ChangeLog From Diff Antara Dua Pangkalan Data

Kita boleh menggunakan plugin untuk menghasilkan fail ChangeLog dari perbezaan antara dua pangkalan data yang ada (contoh: pembangunan dan pengeluaran):

mvn liquibase:diff

Berikut adalah sifatnya:

changeLogFile=src/main/resources/liquibase-changeLog.xml url=jdbc:mysql://localhost:3306/oauth_reddit username=tutorialuser password=tutorialmy5ql driver=com.mysql.jdbc.Driver referenceUrl=jdbc:h2:mem:oauth_reddit diffChangeLogFile=src/main/resources/liquibase-diff-changeLog.xml referenceDriver=org.h2.Driver referenceUsername=sa referencePassword=

Dan di sini adalah coretan yang dihasilkan Changelog :

Ini adalah kaedah yang sangat hebat untuk mengembangkan DB anda - misalnya - membenarkan Hibernate menghasilkan skema baru untuk pembangunan secara automatik, dan kemudian menggunakannya sebagai titik rujukan terhadap skema lama.

7. Gunakan Plugin Hibernate Liquibase

Sekiranya aplikasi menggunakan Hibernate - kita akan melihat cara yang sangat berguna untuk menghasilkan perubahanLog .

Pertama - inilah cara plugin hibibate-hibernate harus dikonfigurasi di Maven:

7.1. Konfigurasi Plugin

Pertama, mari kita konfigurasikan plugin baru dan menggunakan pergantungan yang betul:

  org.liquibase liquibase-maven-plugin 3.4.1  src/main/resources/liquibase.properties    org.liquibase.ext liquibase-hibernate4 3.5   org.springframework spring-beans 4.1.7.RELEASE   org.springframework.data spring-data-jpa 1.7.3.RELEASE    

7.2. Menjana perubahanLog dari Perbezaan Antara Pangkalan Data dan Entiti Kegigihan

Sekarang, untuk bahagian yang menyeronokkan. Kita boleh menggunakan plugin ini untuk menghasilkan fail changeLog dari perbezaan antara pangkalan data yang ada (misalnya pengeluaran) dan entiti ketekunan baru kita.

Oleh itu - untuk mempermudah - apabila entiti diubah, anda hanya boleh menghasilkan perubahan terhadap skema DB lama, dengan mendapatkan cara yang bersih dan hebat untuk mengembangkan skema anda dalam pengeluaran .

Berikut adalah sifat-sifat cecair:

changeLogFile=classpath:liquibase-changeLog.xml url=jdbc:mysql://localhost:3306/oauth_reddit username=tutorialuser password=tutorialmy5ql driver=com.mysql.jdbc.Driver referenceUrl=hibernate:spring:org.baeldung.persistence.model ?dialect=org.hibernate.dialect.MySQLDialect diffChangeLogFile=src/main/resources/liquibase-diff-changeLog.xml

Catatan: ReferenceUrl menggunakan imbasan paket, jadi parameter dialek diperlukan.

8. Kesimpulannya

Dalam tutorial ini, kami menggambarkan beberapa cara untuk menggunakan Liquibase dan menuju cara yang selamat dan matang untuk mengembangkan dan memfaktur semula skema DB aplikasi Java .

Pelaksanaan semua contoh dan coretan kod ini boleh didapati di projek github saya - ini adalah projek berasaskan Eclipse, jadi mudah untuk diimport dan dijalankan sebagaimana adanya.