Ответ
Flyway — это инструмент для контроля версий и управления миграциями базы данных. Он позволяет применять инкрементальные, версионированные изменения к схеме БД (DDL/DML) предсказуемым и воспроизводимым образом.
Ключевые принципы:
- Миграции — это SQL- или Java-скрипты, которые описывают изменения.
- Версионирование — скрипты именуются с префиксом версии (например,
V1__,V2__). - История — Flyway создает и поддерживает таблицу
flyway_schema_history, которая отслеживает примененные миграции.
Пример структуры проекта:
resources/
└── db/
└── migration/
├── V1__create_user_table.sql
├── V2__add_email_to_user.sql
└── V3__insert_initial_data.sql
Содержимое SQL-миграции:
-- V1__create_user_table.sql
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Базовая настройка в Spring Boot (application.yml):
spring:
flyway:
enabled: true
locations: classpath:db/migration # Путь к скриптам
baseline-on-migrate: true # Создаст таблицу истории, если её нет
Преимущества:
- Контроль версий БД: Миграции хранятся вместе с кодом приложения.
- Воспроизводимость: Состояние БД на любом стенде можно привести к нужной версии.
- Автоматизация в CI/CD: Процесс сборки и деплоя может автоматически применять миграции.
- Откат изменений: Поддерживаются миграции на откат (
U— undo), хотя их использование требует осторожности.