2013-07-21 14 views
5

Próbuję wykonać migrację Flywaya na wielu (6 lub mniej) wystąpieniach naszego serwera. Każdy z nich jest budowany i wdrażany automatycznie z Git przy użyciu Bamboo, więc bardzo chciałbym móc użyć celu Maven flyway:migrate, aby każdy serwer migrował się, gdy jest on już wdrożony.Zainicjowanie Flywaya Mavena przed migracją

Jednak teraz próbuję teraz Flywaya, więc żadna z istniejących baz danych nie była init 'd. Zastanawiam się, czy mogę w jakiś sposób określić w Maven, że Flyway powinien init, jeśli jeszcze nie, a następnie migrate za każdym razem?

migrate docs sugerują, że „Flyway stworzy tabelę metadanych automatycznie, jeśli nie istnieje”, ale w rzeczywistości, gdy celem flyway:migrate jest wykonywany, pojawia się błąd:

Failed to execute goal com.googlecode.flyway:flyway-maven-plugin:2.2:migrate (default) on project mutopia-server: Flyway Error: com.googlecode.flyway.core.api.FlywayException: Found non-empty schema "public" without metadata table! Use init() first to initialize the metadata table. -> [Help 1]

Odpowiedz

12

ja nie Rozumiem to z Mavenem, odkąd przełączyłem się na używanie API version ze sprężyną (która wydaje się być lepsza pod każdym względem).

Początkowo miał ten sam problem - niepowodzenie bean na init-method="migrate" nie powiodło się na niepustych schematach, co wymagało najpierw wywołania init. Jednak patrząc na źródło fasoli Flywaya, zauważyłem, że mogę ustawić wartość true dla initOnMigrate i zrobi to za mnie. Nie jestem pewien, dlaczego nie ma tego w dokumentacji; dla kogoś, kto nie bawi się fasolą, nie jest to oczywiste.

W każdym razie, jeśli masz również niepusty schematu, o którym Flyway narzeka, fasola w applicationContext.xml powinna wyglądać następująco:

<bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="initOnMigrate" value="true" /> 
</bean> 
+2

Dzięki za wskazanie tego. Teraz rozszerzyłem komunikat o wyjątku do tego "Użyj init() lub ustaw initOnMigrate na true, aby zainicjować tabelę metadanych." –

0

Jeśli używasz wiosna-boot, umieścić to w podporze/yml złożyć

flyway.initOnMigrate=true 

or 
flyway: 
    initOnMigrate: true 

Uwaga: Bądź ostrożnygdy umożliwiając tym jak usuwa siatkę bezpieczeństwa, która zapewnia - Flyway nie migrują złą da tabase w przypadku błędu konfiguracji!

+0

link do "ostrożnego" ostrzeżenia https://flywaydb.org/documentation/maven/migrate Myślę, że w najnowszej wersji ta właściwość nazywa się "baselineOnMigrate" –

Powiązane problemy