Мультимодульное загрузочное приложение Spring Скрипты миграции пролетного пути

У меня есть многомодульное загрузочное приложение Spring (для простоты это просто moduleA и moduleB). Оба модуля обращаются к одной и той же БД. Кроме того, я использую пролет для инициализации таблиц и заполнения исходных данных в БД.

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

V1_0__init.sql в модуле A конфликтует с V1_0__init.sql в модуле B.

Я знаю, что могу переименовать один из файлов в V1_1__init.sql, и он работает. Но идея состоит в том, что модули могут сосуществовать, не зная, как скрипты миграции названы в другом модуле. Возможно ли это с пролетным путем?


person simibac    schedule 05.05.2020    source источник


Ответы (1)


Имена не могут конфликтовать, поскольку Flyway создает исторический журнал, и два файла с одинаковым именем с разными определениями могут создать неидемпотентное выполнение журнала.

Но вернемся к реальной проблеме ... почему вы пишете два модуля с одной базой данных? Это более проблематично, чем злоупотребление именами Flyway. Я могу представить себе способы решения этой проблемы, но я не хочу упоминать ни одной идеи, когда фундамент имеет изъян. Если одному модулю требуются данные от другого, вам необходимо создать интерфейсы между ними (или перейти к третьему), поскольку вы нарушаете модульное разделение задач. Проще говоря: не делайте этого.

person David Cherryhomes    schedule 05.05.2020
comment
Идея состоит в том, чтобы иметь модульное приложение, в котором определенные модули можно было бы легко исключить для определенных развертываний. Некоторые модули обладают некоторыми дополнительными функциями, которые не следует поставлять каждый раз. Как бы вы структурировали такой проект, если бы не отдельные модули? - person simibac; 06.05.2020
comment
Разделите модули, скомпонуйте их с помощью конфигурации во время сборки, организуйте их с помощью службы конфигурации или разрешений во время выполнения. - person David Cherryhomes; 07.05.2020