Flyway macht die Migration von Datenbanken zum Kinderspiel

Klein, aber oho

Christian Grobmeier


Flyway wurde mir ursprünglich von einem Kollegen empfohlen. Es sei leicht zu integrieren und helfe unglaublich. Na, wer‘s glaubt! Ich kannte bereits ein paar solche Werkzeuge und verließ mich lieber auf Migrationsskripte, die ich per Hand ausführte. Wichtigster Helfer: der Release-Plan. Ich habe das Skript fast nie vergessen. Liquibase ist eines dieser Tools, die ich mir mal angesehen habe. Es soll helfen, die Datenbank „versioniert“ zu entwickeln. Es erzeugt ein großes XML-Dokument aus dem DB-Schema. Wer etwas verändern möchte, verändert das XML, und die Änderung wird dann auf die Datenbank reflektiert. Das Konzept ist sehr mächtig, aber es ist nicht gerade trivial, dieses Werkzeug einzusetzen. Ich wünschte mir ein triviales Tool, das im Prinzip genau das macht, was ich auch mache. Flyway ist genau dieses Tool.

Das Prinzip ist zunächst einfach: Man hinterlegt ein SQL-Skript (funktioniert auch mit Java-Klassen) mit einem bestimmten Namensmuster in einen bestimmten Ordner. Dann kann man mittels Maven, Ant oder ein wenig Java-Magie die Datenbank auf den aktuellsten Stand bringen. Selbst wenn die Datenbank leer ist: Flyway fängt mit der kleinsten Versionsnummer an und arbeitet sich nach oben. „Vollinstallationen“ sind also kein Problem. Das Tool erkennt die aktuelle Version der Datenbank, indem es eine eigene Tabelle unterhält. Dort wird der gegenwärtige Zustand gespeichert. Der Start mit Flyway kann auch zu einem späteren Zeitpunkt erfolgen. Flyway kann relativ einfach eine Datenbank als „Version x.y.z“ markieren, und fängt dann mit der Versionierung eben dort an.

Flyway in Action

Flyway kann standalone, also z. B. mittels Shell-File oder Ant, verwendet werden. Mein Ziel dagegen war es, etwas näher an das so genannte Continuous Deployment heranzukommen. Der letzte Schritt wäre es, ein Hook aufzurufen, wenn ein Commit erfolgt. Mein Server sollte sich dann die letzten Änderungen holen, bauen, Flyway ausführen und anschließend einen Restart meiner Web-App durchführen. Bisher war eben die Datenbank das größte Problem. Letztlich habe ich mich entschieden, beim Start meiner Web-App die Datenbankversion zu prüfen. Denn man kann natürlich auch vergessen, Flyway auszuführen, wenn man doch einmal manuell deployen möchte.

Listing 1 commons-dbcp commons-dbcp 1.4  com.googlecode.flyway flyway-core 1.7

Flyway macht die Migration von Datenbanken zum Kinderspiel

Klein, aber oho

Christian Grobmeier


Flyway wurde mir ursprünglich von einem Kollegen empfohlen. Es sei leicht zu integrieren und helfe unglaublich. Na, wer‘s glaubt! Ich kannte bereits ein paar solche Werkzeuge und verließ mich lieber auf Migrationsskripte, die ich per Hand ausführte. Wichtigster Helfer: der Release-Plan. Ich habe das Skript fast nie vergessen. Liquibase ist eines dieser Tools, die ich mir mal angesehen habe. Es soll helfen, die Datenbank „versioniert“ zu entwickeln. Es erzeugt ein großes XML-Dokument aus dem DB-Schema. Wer etwas verändern möchte, verändert das XML, und die Änderung wird dann auf die Datenbank reflektiert. Das Konzept ist sehr mächtig, aber es ist nicht gerade trivial, dieses Werkzeug einzusetzen. Ich wünschte mir ein triviales Tool, das im Prinzip genau das macht, was ich auch mache. Flyway ist genau dieses Tool.

Das Prinzip ist zunächst einfach: Man hinterlegt ein SQL-Skript (funktioniert auch mit Java-Klassen) mit einem bestimmten Namensmuster in einen bestimmten Ordner. Dann kann man mittels Maven, Ant oder ein wenig Java-Magie die Datenbank auf den aktuellsten Stand bringen. Selbst wenn die Datenbank leer ist: Flyway fängt mit der kleinsten Versionsnummer an und arbeitet sich nach oben. „Vollinstallationen“ sind also kein Problem. Das Tool erkennt die aktuelle Version der Datenbank, indem es eine eigene Tabelle unterhält. Dort wird der gegenwärtige Zustand gespeichert. Der Start mit Flyway kann auch zu einem späteren Zeitpunkt erfolgen. Flyway kann relativ einfach eine Datenbank als „Version x.y.z“ markieren, und fängt dann mit der Versionierung eben dort an.

Flyway in Action

Flyway kann standalone, also z. B. mittels Shell-File oder Ant, verwendet werden. Mein Ziel dagegen war es, etwas näher an das so genannte Continuous Deployment heranzukommen. Der letzte Schritt wäre es, ein Hook aufzurufen, wenn ein Commit erfolgt. Mein Server sollte sich dann die letzten Änderungen holen, bauen, Flyway ausführen und anschließend einen Restart meiner Web-App durchführen. Bisher war eben die Datenbank das größte Problem. Letztlich habe ich mich entschieden, beim Start meiner Web-App die Datenbankversion zu prüfen. Denn man kann natürlich auch vergessen, Flyway auszuführen, wenn man doch einmal manuell deployen möchte.

Listing 1 commons-dbcp commons-dbcp 1.4  com.googlecode.flyway flyway-core 1.7

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang