Что такое Flyway и для чего он используется?

«Что такое Flyway и для чего он используется?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 # Создаст таблицу истории, если её нет

Преимущества:

  1. Контроль версий БД: Миграции хранятся вместе с кодом приложения.
  2. Воспроизводимость: Состояние БД на любом стенде можно привести к нужной версии.
  3. Автоматизация в CI/CD: Процесс сборки и деплоя может автоматически применять миграции.
  4. Откат изменений: Поддерживаются миграции на откат (U — undo), хотя их использование требует осторожности.