Створення та вставка великих обсягів даних у бази даних SQLite з легкістю
Сучасні додатки часто вимагають частих оновлень схеми бази даних. Збереження цих оновлень синхронізованими між середовищами (розробка, тестування, продакшн) може бути складним завданням. Ось тут і допомагає Liquibase — інструмент контролю версій баз даних.
У цій статті ми розглянемо, як Liquibase допомагає ефективно керувати змінами в базах даних і продемонструємо його можливості на реальному прикладі з використанням бази даних H2 та Spring Boot.
Що таке Liquibase?
Liquibase — це відкритий інструмент для керування схемами баз даних. Він дозволяє розробникам:
- Відслідковувати зміни бази даних у системах контролю версій.
- Застосовувати оновлення консистентно між різними середовищами.
- Відкочувати зміни, коли це необхідно.
- Автоматизувати міграції баз даних як частину CI/CD пайплайнів.
Проблема, яку він вирішує
Без інструменту на кшталт Liquibase оновлення бази даних можуть призводити до:
- Невідповідностей: Різні середовища з різними версіями схем.
- Помилок через ручне втручання: Розробники можуть помилятися під час вручну застосування SQL-скриптів.
- Складнощі з відкатом: Ускладнення при відкаті змін під час помилок.
Liquibase вирішує ці проблеми, використовуючи декларативні журнали змін (XML, YAML, JSON або SQL), які описують зміни схеми в контрольованому та аудиторному вигляді.
Практичний приклад використання в індустрії
— — — — — — — — — — — — — — — — — — — — —
Опис проблеми
Компанії потрібно створити систему керування користувачами з наступними вимогами:
- Спочатку створити таблицю для зберігання інформації про користувачів.
- Потім додати стовпець для
phone_number
в таблицюusers
. - Додати таблицю
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
- Контроль версій: Відслідковує зміни схеми в структурованому вигляді.
- Підтримка відкату: Дозволяє повернути зміни при помилках (наприклад,
liquibase rollbackCount 1
). - Послідовність середовищ: Забезпечує однакову схему в усіх середовищах.
- Інтеграція з 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