Оптимізація змін у базі даних за допомогою Liquibase: посібник з інтеграції з Spring Boot

Створення та вставка великих обсягів даних у бази даних SQLite з легкістю

Сучасні додатки часто вимагають частих оновлень схеми бази даних. Збереження цих оновлень синхронізованими між середовищами (розробка, тестування, продакшн) може бути складним завданням. Ось тут і допомагає Liquibaseінструмент контролю версій баз даних.

У цій статті ми розглянемо, як Liquibase допомагає ефективно керувати змінами в базах даних і продемонструємо його можливості на реальному прикладі з використанням бази даних H2 та Spring Boot.

pic

Що таке Liquibase?

Liquibase — це відкритий інструмент для керування схемами баз даних. Він дозволяє розробникам:

  • Відслідковувати зміни бази даних у системах контролю версій.
  • Застосовувати оновлення консистентно між різними середовищами.
  • Відкочувати зміни, коли це необхідно.
  • Автоматизувати міграції баз даних як частину CI/CD пайплайнів.

Проблема, яку він вирішує

Без інструменту на кшталт Liquibase оновлення бази даних можуть призводити до:

  • Невідповідностей: Різні середовища з різними версіями схем.
  • Помилок через ручне втручання: Розробники можуть помилятися під час вручну застосування SQL-скриптів.
  • Складнощі з відкатом: Ускладнення при відкаті змін під час помилок.

Liquibase вирішує ці проблеми, використовуючи декларативні журнали змін (XML, YAML, JSON або SQL), які описують зміни схеми в контрольованому та аудиторному вигляді.

Практичний приклад використання в індустрії

— — — — — — — — — — — — — — — — — — — — —

Опис проблеми

Компанії потрібно створити систему керування користувачами з наступними вимогами:

  1. Спочатку створити таблицю для зберігання інформації про користувачів.
  2. Потім додати стовпець для phone_number в таблицю users.
  3. Додати таблицю roles для керування ролями користувачів, а також таблицю зв'язків (user_roles).
    4.
    Демонстрація сценарію відкату, де зміна скасовується.

Ми будемо використовувати Liquibase для керування цими змінами в схемі крок за кроком.

Налаштування Liquibase з Spring Boot та H2

Крок 1: Додати залежності

Додайте необхідні залежності у ваш файл build.gradle:

dependencies {  
 implementation 'org.springframework.boot:spring-boot-starter-data-jpa'  
 implementation 'org.springframework.boot:spring-boot-starter-web'  
 runtimeOnly 'com.h2database:h2'  
 implementation 'org.liquibase:liquibase-core'  
}

Крок 2: Налаштувати додаток

Оновіть файл application.yml:

spring:  
 datasource:  
 url: jdbc:h2:file:./data/testdb  
 username: sa  
 password:  
 driver-class-name: org.h2.Driver  
 liquibase:  
 change-log: classpath:db/changelog/db.changelog-master.xml  
 h2:  
 console:  
 enabled: true  
 path: /h2-console
  • Персистентна база даних: Використання jdbc:h2:file:./data/testdb гарантує, що база даних зберігатиметься навіть після зупинки сервера.
  • Консоль H2: Для доступу до консолі бази даних H2 перейдіть за адресою http://localhost:8080/h2-console.

Крок 3: Перше оновлення (Створення таблиці користувачів)

Створіть головний журнал змін (db.changelog-master.xml), щоб включити окремі зміни:





Визначте перший changeset для створення таблиці users:

















Перезапустіть додаток для створення таблиці users.

Перевірте: Перейдіть до консолі H2 і виконайте:

SELECT * FROM users;

Крок 4: Друге оновлення (Додавання номера телефону)

Оновіть головний журнал змін:


Визначте другий changeset для додавання стовпця phone_number:











Перезапустіть додаток для застосування зміни.

Перевірте: Виконайте:

DESCRIBE users;

Крок 5: Третє оновлення (Додавання таблиці ролей)

Оновіть головний журнал змін:


Визначте третій changeset для створення таблиць roles та user_roles:

Перезапустіть додаток, щоб застосувати зміни.

Перевірте: Виконайте:

SELECT * FROM roles;  
SELECT * FROM user_roles;

Крок 6: Сценарій відкату

Уявімо, що стовпець phone_number більше не потрібен.
Liquibase дозволяє виконати відкат цієї зміни.

Налаштування відкату

Оновіть другий changeset, щоб додати інструкції для відкату:















Виконання відкату

Запустіть команду відкату через Gradle:

./gradlew liquibaseRollback -PliquibaseCommandValue=1

Перезапустіть додаток та перевірте:

DESCRIBE users;

Стовпець phone_number буде видалено.

Переваги Liquibase

  1. Контроль версій: Відслідковує зміни схеми в структурованому вигляді.
  2. Підтримка відкату: Дозволяє повернути зміни при помилках (наприклад, liquibase rollbackCount 1).
  3. Послідовність середовищ: Забезпечує однакову схему в усіх середовищах.
  4. Інтеграція з CI/CD: Автоматизує міграції схеми в пайплайнах.

Висновок

Liquibase — потужний інструмент для ефективного керування змінами в базах даних. Дотримуючись цього посібника, ви дізналися, як:

  • Налаштувати Liquibase з Spring Boot та H2.
  • Керувати оновленнями схеми через кілька ітерацій.
  • Виконувати відкат змін без проблем.
  • Підтримувати стабільну та контрольовану схему бази даних.

Якщо вам сподобався цей матеріал, поставте лайк статті та підписуйтесь на мене для отримання нових статей.

Ось відео на каналі YouTube #codefarm, яке демонструє цей процес — не забудьте подивитися:

https://www.youtube.com/watch?v=txaogG-LlR0

Перекладено з: Streamlining Database Changes with Liquibase: A Spring Boot Integration Guide

Leave a Reply

Your email address will not be published. Required fields are marked *