Обратный звонок Flyway перед миграцией - PullRequest
0 голосов
/ 18 мая 2018

У меня есть проект flyway, в котором я хочу запустить обратный вызов java, чтобы изменить имя определенных файлов sql перед запуском миграции в базу данных.К сожалению, происходит то, что миграция сначала выполняется для базы данных, а затем вызывается обратный вызов для изменения имени файла.

Вот мой класс обратного вызова:

public class FooCallback extends BaseFlywayCallback {
    @Override
    public void beforeMigrate(final Connection connection) {
        //rename file from V_1_FooScript.sql to V_05172018_FooScript.sql
    }
}

Но в таблице schema_version Iсм. следующую запись:

description   type    script                checksum
FooScript     SQL     V_1__FooScript.sql    1473655428

В нем должно быть указано

description   type    script                      checksum
FooScript     SQL     V_05172018_FooScript.sql    1473655428

Как мне получить flyway для изменения имени файла до запуска миграции?

Редактировать 1 : Похоже, что flyway выполняет миграцию, затем выполняет обратный вызов для изменения имени файла, а затем снова запускает миграцию, так как имя файла изменилось, но не удалось при попытке запустить второйвремя, потому что скрипт создает таблицу, поэтому, когда он запускается во второй раз, он просто говорит: «Таблица Foo уже существует».

1 Ответ

0 голосов
/ 23 мая 2018

Как прокомментировали другие, ваш вопрос не совсем понятен.Поскольку flyway рекурсивно обнаруживает изменения в схеме, изменение имени файла в обратном вызове вызывает вторую миграцию.Я подозреваю, что ваша история покажет вам, что первая миграция была подготовлена ​​перед запуском, вторая миграция была подготовлена ​​во время вашего прогона, а затем оба были выполнены.

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

flyway.sqlMigrationPrefix Префикс имени файла для версионных миграций SQL (по умолчанию: V) Версионные миграции SQL имеют следующую структуру имени файла: prefixVERSIONseparatorDESCRIPTIONsuffix, который с использованием значений по умолчанию переводит в V1_1__My_description.sql

Обратите внимание, что перед «FooScript.sql» стоит один символ подчеркивания.Для этого вам необходимо изменить по умолчанию sqlMigrationSeparator .

...