Flyway — подключение, настройка библиотеки и плагина flyway-maven-plugin.

Базовый обзор библиотеки Flyway. Подключение к проекту, настройка библиотеки и использование плагина flyway-maven-plugin.

Используемые технологии и библиотеки
  • Flyway-maven-plugin 4.0.3
  • Oracle 11g XE

1. Описание задачи

Научиться использовать flyway-maven-plugin в java проекте. Прописать необходимые maven зависимости в pom.xml. Описать базовые соглашения при работе с библиотекой Flyway.

2. Структура проекта

Структура проекта flyway

Для базовой настройки flyway нам необходима только папка resources. Внутри находится скрипт создания пользователя (схемы) для базы данных Oracle 11g XE (create_user_tablespace.sql), базовый скрипт создания таблиц в схеме (V0_0_00__create_tables.sql), а так же пример вставки данных в эти таблицы (V0_0_01__insert_init_data.sql). Обратите внимание на папку target. Важно, чтобы после сборки она выглядела похожим образом (будет подробнее описано ниже).

3. pom.xml

Библиотека поддерживает различные способы взаимодействия flyway и базы данных. В этой статье мы рассмотрим очень легкий в использовании способ — использование плагина flyway-maven-plugin. Итак в начале полный пример pom.xml.

pom.xml:

На первый взгляд xml файл может показаться большим. На самом деле большая часть настроек для простого запуска не нужна и достаточно использовать настройки maven по умолчания. Но похожие настройки используются в других статьях на сайте и поэтому разберем их поподробнее.

Переопределенные настройки компиляции проекта, чтобы всегда использовалась нужная версия jdk. Не является необходимым для нашей задачи.

Собственно сам плагин flyway. Поддерживает множество настроек конфигурации. Автор вынес их в профиль, который будет описан ниже.

Настройка плагина работы с ресурсами. Если не использовать профили, многомодульную структуру проекта, то эта часть не обязательная. По умолчанию всё и так скопируется и подхватится maven. После описания других настроек мы вернемся к этой части и поясним зачем это было добавлено.

Указывает путь фильтрации ресурсов maven-resource-plugin. Пояснение будет ниже.

В проекте используется один профиль, который включен по умолчанию. Вот здесь и записаны все необходимые настройки для flyway плагина. По соглашению они должны начинаться с <flyway.**>. Настройки являются обязательными (они могут быть перенесены непосредственно в описание плагина выше). Здесь используется двойная конструкция в виде определения сначала свойств <db.**>, а потом вставка их в <flyway.**>${db.**}></flyway.**>. Можно сразу же вставить ссылку на БД, имя пользователя и т.п. в теги флайвей. Конструкция с отдельными свойствами для БД (<db.**>) удобна в случае повторения этих данных в разных частях pom.xml и внешних настройках вроде datasource.properties.

В проекте используется база данных от Oracle, которая требует указания драйвера для подключения. Т.к. драйвер отсутствует в центральном репозитории, то здесь указан дополнительный, откуда и будет скачан драйвер ojdbc6 (версия указана вначале pom.xml).

Теперь поясним зачем нужен resource plugin и дополнительные настройки. В структуре проекта вы могли заметить файл datasource.properties. В нем не указаны в явном виде настройки подключения к бд, а прописано следующее:

Как видите это те же самые свойства, что были указаны в профиле. Такая запись очень удобна, если над проектом работает много разработчиков и имеется несколько разных БД. Достаточно просто поменять профиль (у каждого разработчика он свой) и проект будет собираться с нужным url, username, password и др. Вот здесь и вступает в игру maven-resource-plugin.

  • В фазе validate (сразу после clean) плагин произведет фильтрацию в файлах <directory>src/main/resources</directory>. В нашем случае будет найден файл datasource.properties и в нем будет изменено db.username=${db.username} на db.username=js (из настроек в профиле);
  • Файлы будут скопированы в путь <outputDirectory>${project.build.outputDirectory}</outputDirectory>. В нашем случае это target/classes.

4. Sql скрипты

Отдельно вынесу описание под кат используемых скриптов.

create_user_tablespace.sql:

V0_0_00__create_tables.sql:

V0_0_01__insert_init_data.sql:

 

5. Описание работы с Flyway

Для начала работы необходимо создать схему (не таблицы — это мы сделаем автоматически!) в нашей базе данных. Эта работа не входит в тему статьи, но вы можете просто воспользоваться скриптом create_user_tablespace.sql, который создаст двух пользователей и выдаст им права. Почему двух? Хорошей практикой является максимальное ограничение прав для пользователя приложения (в нашем случае пользователь с именем JS). В тоже время нужен какой-то администратор, который сможет изменять эту схему. Для этого используется пользователь с именем ADMIN.

В настройках профиля вы можете заметить, что схема указана для приложения (JS), но выполняться flyway будет из под пользователя ADMIN, т.к. пользователь приложения не обладает практически никакими правами.

Как работает Flyway? При запуске плагина он будет искать все скрипты по пути db/migration.

По соглашению файлы должны именоваться следующим образом.

Имя содержит:

  • префикс: Настраиваемый, по умолчанию: V для версионных миграций, R для повторяющихся
  • версия: (Только для версионируемых миграций) Можно прописывать сколько угодно цифр
  • разделитель: Настраиваемый, по умолчанию: __ (два подчеркивания)
  • описание: слова через подчеркивание
  • суффикс: Настраиваемый, по умолчанию: .sql

При миграции данных скрипты будут выполняться последовательно.

6. Использование плагина Flyway для maven

Прежде чем запускать плагин необходимо собрать проект.

Обратите внимание, что при сборке подтянулись настройки из профиля.

Выполним команду flyway:clean.

В консоль будет выведена информация:

Проверим подключение к БД и что внутри (как подключиться к базе Oracle из IDEA описано в отдельной статье):

Теперь самое интересное. Запустим команду flyway:migrate:

Обратите внимание на вывод в консоль:

А теперь проверим нашу базу данных!

Вот так просто мы получили все данные из двух скриптов. Если до этого вы каждый раз проливали данные в базу вручную, то уверен вы перестанете так делать:).

Flyway по умолчанию проверяет чексуммы и версии в базе. Если вы хоть чуть-чуть измените один из sql файлов, то будет выдана ошибка. Эти данные находятся в таблице schema_version.

 

Может быть интересно

Databene Benerator — автоматическая генерация тестовых данных

 

Исходный код

flyway-start

Share Button
6
848 Total Views 3 Views Today

Добавить комментарий