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:
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
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
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
Sie schreiben einfach Anweisungen in eine SQL-Datei wie 'löschen von my_table wo ...' – bekce