2017-01-18 1 views
0

Ich verwende Spring Boot 1.4.1.RELEASE mit Flyway.Migration des Flyway-Schemas schlägt mit DML- und DDL-Skript fehl

Flyway kann das DML-Skript bei der Schema-Migration nicht ausführen.

Meine Ressourcen-Ordner hat die folgende Struktur für Flyway:

enter image description here

Performing Flyway auf einer leeren Datenbank, funktioniert einwandfrei. Es erstellt das Schema und die Daten für die Datenbank.

Aber einmal, Schema Migration (das heißt, Änderungen in DML und DDL-Scripts) ausgeführt werden soll, zeigt Flyway die folgende Fehlermeldung:

Caused by: org.flywaydb.core.api.FlywayException: Schema `testDB` contains a failed migration to version 1.02 ! 
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:196) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:156) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:156) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1059) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.Flyway.execute(Flyway.java:1418) ~[flyway-core-3.2.1.jar:na] 
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1006) ~[flyway-core-3.2.1.jar:na] 
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE] 

Mein application-dev.properties wie folgt aussieht:

flyway.enabled=true 
flyway.url: jdbc:mysql://localhost:3306 
flyway.user: usertest 
flyway.password: testtest 
flyway.schemas=testDB 
flyway.baseline-on-migrate=true 
flyway.locations:classpath:/db/migration/dev,/db/data 

# Naming strategy 
spring.jpa.hibernate.naming.strategy= org.hibernate.cfg.ImprovedNamingStrategy 

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 
spring.jpa.show-sql = true 
logging.level.org.hibernate.SQL=debug 
spring.jpa.hibernate.format_sql=true 
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 

spring.jpa.generate-ddl = false 
spring.jpa.hibernate.ddl-auto =none 
+0

Es heißt, es gibt eine fehlgeschlagene Migration. Bei der Ausführung einer leeren Datenbank sollte ein Fehler auftreten. Könnten Sie sie posten? – bekce

+0

Ich denke, ich habe herausgefunden, warum Flyway fehlschlägt: Es kann die vorherigen Einträge in der Datenbank nicht löschen! Wie kann Flyway so konfiguriert werden, dass alte Einträge vor dem Einfügen neuer Daten gelöscht werden? – ThomasW

+0

Sie schreiben einfach Anweisungen in eine SQL-Datei wie 'löschen von my_table wo ...' – bekce

Antwort

0

Diese Ausnahme bedeutet einfach, dass unter dem Satz des „neuen“ von flyway auf Migrate Ausführung identifiziert Migrationen, ein oder mehr Skripts zu einem Fehler geführt hat.

Flyway erstellt eine Tabelle, in der die ausgeführten Migrationsskripts zusammen mit ihrer Prüfsumme protokolliert werden. Sie können diese Tabelle überprüfen, sie sollte eine oder mehrere "0" in der Ausführungsergebnisspalte enthalten.

Wenn Sie sich in dieser Situation befinden (auf der lokalen bis zur Dev-Phase), können Sie einfach die erfolglosen Zeilen in der Migrationstabelle löschen, die inkriminierten Skripte korrigieren und schließlich die Migration der Zugwege erneut starten.

Verwandte Themen