⚙️ Spring Boot + Flyway: пошаговая настройка миграций базы данных
Когда проект живёт дольше полугода — ручное обновление схемы БД превращается в хаос.
Flyway решает эту проблему: управляет версионированием схемы и миграциями через SQL-скрипты прямо из вашего приложения.
Для настройки:
1️⃣ Добавляем зависимость
org.flywaydb
flyway-core
ИЛИ
implementation("org.flywaydb:flyway-core")
Также добавляет драйвер для вашей БД.
2️⃣ Создаём структуру для миграций
По умолчанию Flyway ищет скрипты в:
src/main/resources/db/migration/
Пример:
db/migration/
├─ V1__init_schema.sql
├─ V2__add_users_table.sql
└─ V3__add_index_email.sql
Имена файлов важны — Flyway сортирует их по версии (V1, V2, ...).
3️⃣ Пример SQL-миграции
— V1__init_schema.sql
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL
);
— V2__add_users_table.sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT now()
);
4️⃣ Настройки Flyway в application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/app
username: app
password: secret
flyway:
enabled: true
baseline-on-migrate: true
locations: classpath:db/migration
Flyway выполнит все миграции, которых ещё нет в таблице flyway_schema_history.
5️⃣ Команды и интеграция
▪️ Локально:
./mvnw flyway:migrate
или просто запустите Spring Boot — миграции применятся автоматически.
▪️ Для CI/CD:
— Используйте flyway:validate перед деплоем.
— Добавляйте новые SQL-файлы при изменении схемы.
— Не редактируйте старые версии (они уже зафиксированы).
6️⃣ Полезные практики
— Используйте R__-скрипты (repeatable migrations) для справочников, триггеров, процедур.
— Версионируйте миграции в Git вместе с кодом.
— Проверяйте миграции на чистой базе перед мержем.
— Совмещайте с Testcontainers для автоматической проверки миграций в CI.
💡 Преимущество Flyway — прозрачная история эволюции базы. Можно воспроизвести схему любой версии, не ломая прод.
🐸 Библиотека джависта
#Enterprise