Проблема заключается в том, что вы используете:
.locations("classpath:db/migration/MySQL", "classpath:db/migration/H2")
Это добавит обе миграции к пути выполнения.Это то, что вызывает проблему, потому что эта конфигурация инструктирует flyway всегда использовать сценарии из обоих мест, вместо того, чтобы использовать только сценарии H2 для H2 и сценарии MySQL для MySQL.
Вместо этого следует добавить толькоконкретный путь для активного драйвера на пути.
Что-то вроде
String driverVendor = ..; // something to decide h2 or mysql
Flyway flyway = Flyway
.configure()
.locations("classpath:db/migration/" + driverVendor)
Возможно, вам потребуется указать имена папок в нижнем регистре, то есть от H2
до h2
и MySQL
на mysql
, чтобы это работало.
В качестве альтернативы рассмотрите возможность использования автоконфигурации Spring Boots Flyway вместо кодирования конфигурации Flyway в коде.Это позволяет определить путь в конфигурации приложения следующим образом:
spring.flyway.locations=classpath:db/migration/{vendor}
Где {vendor}
будет автоматически заполнено именем поставщика драйвера, используемого для подключения.
См. Также Выполнить миграцию базы данных Flyway при запуске