Flyway Reparatur mit Spring Boot
Ich verstehe nicht ganz, was soll ich tun, wenn eine migration fehlschlägt, mit Flyway in eine Spring-Boot-Projekt.
Ich aktiviert Flyway, indem Sie einfach die Flugroute Abhängigkeit in meinem pom.xml
. Und alles funktioniert einwandfrei. Meine Datenbank-Skripte sind migriert, wenn ich starten Sie die Spring-Boot-app.
Aber ich hatte einen Fehler in einem meiner Skripte und meine Letzte migration ist fehlgeschlagen. Wenn ich jetzt versuche zu migrieren, gibt es eine "Migration checksum mismatch". Normalerweise würde ich laufen mvn flyway:repair
, aber da bin ich mit Spring Boot, ich bin eigentlich nicht verwenden die Flugroute Maven-plug-in. Also, was soll ich tun?
- Ich würde sagen, manuell ausgeführt
flyway repair
als änderung der vorherigen sql-Dateien sollten sehr außergewöhnlich. Es sieht aber so aus, dass die Prüfsummen nicht übereinstimmen zwischen sql-Dateien im classpath und lokalen... - Aber, wie ich schon sagte, bei der Verwendung von Spring Boot, Sie sind nicht zu erwarten, dass die Nutzung der Flyway-plug-in.
- Nein, aber mit Zugrouten, du bist nicht erwartet, zu ändern bestehender sql-Dateien! Vor allem, wenn Sie wurden bereits ausgeführt auf die prod-db. Sollten Sie nur hinzufügen, neue SQL-Dateien mit Ihren änderungen jedes mal. Ich kann verstehen, warum der Frühling-boot nicht unterstützt diese: sollte es bleiben, eine manuelle operation und sollte sicherlich nicht per default... (ignoriert alle Veränderungen machen, die auf SQL-schon lief)
- Ok, aber wie testen Sie Ihre SQL-Skript dann? Manuell? Oder mit der Flyway-plug-in?
- Beide. Ich haben im Grunde ein "test-Datenbank" auf meiner dev-Umgebung, die kann ich flush jederzeit:
mvn flyway:clean flyway:migrate
. Sie können auch flyway Befehlszeile. - Ok, ich dachte, es wäre ein Weg, um zu vermeiden, mit der Flyway-plug-in. BTW, ich Rede auf dem das Skript läuft auf meinem dev-Datenbank. Ich lief nie mein Skript in prod. So, einen Fehler an dieser Stelle können auftreten. Ich war auf der Suche für die Reparatur meiner dev-Datenbank. Aber vielen Dank für deinen input.
- Es ist etwas ironisch über Zugrouten, deren einzige Aufgabe es ist zu unterstützen in der version Migrationen, seine eigene version der migration.
Du musst angemeldet sein, um einen Kommentar abzugeben.
gibt es mehrere Möglichkeiten, um eine Reparatur durchführen, die auf die Datenbank. Ich persönlich bevorzuge die einfache SQL-Anweisung.
SQL-Anweisung:
Löschen Sie einfach die Zeile mit der fehlgeschlagenen migration. Danach führen Sie die migration erneut.
Laufen zugroute direkt
Können Sie installieren Flyway lokalen und führen
flyway repair
in der KonsoleVerwenden Sie die zugroute Maven-Plugin
Fügen Sie die Flyway Maven-Plugin, um Ihre pom und führen
mvn flyway:repair
. Ich glaube nicht, dass dies im Widerspruch mit der Spring-Boot-Konzept.Erweitern Spring Boot
In der
FlywayMigrationStrategy
können Sie die Migration oder die Reparatur-Methode von Zugrouten. Weitere Informationen finden Sie in der Spring Boot-Reference Guide.Ich glaube nicht, dass die
FlywayMigrationStrategy
in der Anwendung ist der richtige Ort, um die Datenbank zu reparieren. Eine fehlgeschlagene migration ist eine Ausnahme und sollte behandeln, die außerhalb der Anwendung.Flyway Maven-Plugin
Nur um diese info zu @Daniel die Antwort
1.
2.
3.
PS.: wenn der Schritt 2, und 3 funktionieren nicht, die Reihenfolge zu ändern.
Mehr info auf maven-goals: https://flywaydb.org/documentation/maven/
spring.datasource.url
,spring.datasource.username
,spring.datasource.password
. Das ist, wie meine app verbindet sich zur db. Kann ich die Wiederverwendung dieser Eigenschaften für das Plug-in?Bei der Datenbank-migration schlägt fehl, die migration wird als fehlgeschlagen markiert im schema history-Tabelle
(i.e flyway_schema_history)
Anzeige-manuelle Datenbank-Bereinigung erforderlich sein. Aber wenn sich die Datenbank unterstützt DDL-Transaktionen, die migration wird automatisch zurückgerollt, und nichts ist aufgenommen in das schema der Geschichte Tisch.PostgreSQL
,Amazon Redshift
,MS SQL
sind einige der Datenbanken, die Unterstützung von DDL-Transaktionen in der Erwägung, dassOracle Database
,MySQL
,MariaDB
,Amazon Aurora
nicht unterstützt DDL-Transaktionen.Im Falle einer fehlgeschlagenen migration Einträge, gibt es mehrere Optionen, um es zu reparieren (gilt nur für Datenbanken, die NICHT die Unterstützung von DDL-Transaktionen), wie beschrieben von @daniel-käfer. Ich möchte hinzufügen, eine andere (möglicherweise einfacher Weg) zum Umgang mit fehlgeschlagenen Migrationen.
Gibt es mehrere Rückrufe unterstützt von Zugrouten,
afterMigrateError
ist einer von Ihnen. Wenn wir noch eine sql-Datei mit dem NamenafterMigrateError.sql
dann, wird es ausgeführt, nach jedem fehlgeschlagenen Migration läuft. Deshalb können wir einfach erstellen Sie eine DateiafterMigrateError.sql
auf Standard-Speicherort der Datenbank-migration-Ordner (resources/db/migration
) mit sql-Befehl zu löschen, ist fehlgeschlagen Migrationen vonflyway_schema_history
Tabelle.Den sql-Befehl
afterMigrateError.sql
werden können, wie unten erwähnt:Dieser Befehl sucht nach der Tabelle
flyway_schema_history
wenn es vorhanden ist sonst wird es keine Veränderungen. Dann es sieht einfach für die Zeilen, die hatsuccess
Spalte mit0
Eintrag (eigentlich passieren, wenn die migration fehlschlägt , alle erfolgreichen migration wird Wert1
im Erfolg-Spalte), dann löschen Sie diese Einträge. Jetzt können wir einfach ändern, unsere neuesten migration-Datei, und korrigieren Sie es, und starten Sie erneut.Installieren flyway lokal wie gesagt oben, ändern Sie das Verzeichnis in der installation dann ausführen (Beispiel H2):