Обратный вызов 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 я вижу такую ​​запись:

description   type    script                checksum
FooScript     SQL     V_1__FooScript.sql    1473655428

Следует сказать

description   type    script                      checksum
FooScript     SQL     V_05172018_FooScript.sql    1473655428

Как мне заставить пролетный путь изменить имя файла перед, запускающего миграцию?

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

Почему бы не сделать переименование при запуске?

Mạnh Quyết Nguyễn 21.05.2018 17:15

Какой здесь вариант использования? Как запустить миграцию? Почему бы не выполнить код для переименования перед самой миграцией?

Tarun Lalwani 21.05.2018 21:03

Стоит отметить, что BaseFlywayCallback не рекомендуется в текущей версии Flyway - теперь вместо него нужно реализовать Перезвоните.

Steve Chambers 21.05.2018 22:19

Обратите внимание, что если вы пытаетесь использовать эту функцию для динамического изменения имен, это испортит бессилие пролетного пути, поскольку он обнаружит новые файлы изменений как новые файлы. Это может привести к тому, что он будет работать в другом порядке в разных средах ...

Patrick 28.05.2018 17:03
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
4
599
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме