#java #spring-boot #flyway
Вопрос:
Мы настраиваем/запускаем наши миграции flyway на java в нашем приложении Spring Boot.
Таким образом, у нас есть файлы миграции sql и java.
В определенных средах мы хотим, чтобы выполнялись дополнительные миграции. В основном в QA env мы хотим подготовить базу данных с данными для тестов.
Поэтому я знаю, что вы можете настроить несколько мест миграции на java.
Так что я могу сделать что-то вроде этого
if(isQAenv == true)
{
Flyway.configure().locations("/db/migrations/","db/qaMigrations/")
else{
Flyway.configure().locations("/db/migrations/")
}
Моя проблема заключается в управлении версиями и обеспечении того, чтобы все выполнялось так, как задумано во всех средах.
Нужно ли мне поддерживать систему нумерации в правильном порядке?
Итак, допустим, у меня есть следующие сценарии миграции, которые должны выполняться во всех средах
db/migrations/V1__table1.sql
db/migrations/V2__table2.sql
db/migrations/V4__table2.sql
И эта миграция выполняется только в QA env
db/qaMigrations/V3__insert_statements.sql
Теперь в не QA env у моего beacon_history_table есть миграция для 1,2,4. Есть ли какой-нибудь способ избежать этого и иметь что-то, что выглядит чище в таблице истории?
Ответ №1:
Вы можете легко сделать это с помощью профилей, поэтому предположим, что у вас есть профили, т. е. dev, prod, тогда вы можете легко определить spring.flyway.locations
путь в файле свойств для этого профиля или в разделе для этого профиля в application.yml
файле.
spring:
profiles: prod
flyway:
locations: classpath:/db/migration,classpath:/prod/db/migration
---
spring:
profiles: dev
flyway:
locations: classpath:/db/migration,classpath:/dev/db/migration
Или, если у вас есть properties
файл, то у вас должен быть файл, т. е. application-dev.properties
, а затем
spring.flyway.locations=classpath:/db/migration,classpath:/dev/db/migration
Все пути, упомянутые выше, должны присутствовать внутри resources
папки.
Комментарии:
1. Как вы контролируете порядок, в котором будут выполняться сценарии? Например. те, которые находятся в
dev/db
папке, заполняющей таблицу X, должны быть запущены после сценария в/db
папке, создающей таблицу X, и перед сценарием в разделе/db
переименование таблицы в Y2. Порядок будет зависеть от версии, которую вы указываете в своем скрипте, поэтому, если версия папки dev больше, чем обычные, она будет применяться позже, если она первая, то она будет применяться первой перед общим