Einführung in Flyway: Was es ist und warum man es braucht
Flyway ist eine Bibliothek für das Versionsmanagement und die Migration von Datenbanken (Database Migration Tool). In der modernen Softwareentwicklung, insbesondere bei Teamarbeit und der Nutzung von CI/CD-Methoden, entsteht ein kritischer Bedarf, die Datenbankstruktur zwischen Entwicklern, Test- und Produktivumgebungen zu synchronisieren. Flyway löst dieses Problem, indem es ermöglicht, Änderungen am Datenbankschema (Erstellen von Tabellen, Hinzufügen von Spalten, Indizes, Triggern usw.) als sequenzielle, versionierte SQL-Skripte oder Java-Klassen zu beschreiben.
Das grundlegende Konzept von Flyway ist einfach: Jede Migration hat eine eindeutige Versionsnummer (z. B. V1, V2, V3) und wird genau einmal ausgeführt. Die Bibliothek verfolgt, welche Migrationen bereits auf eine bestimmte Datenbank angewendet wurden, und verwendet dazu eine spezielle Tabelle (standardmäßig flyway_schema_history). Dies gewährleistet die Idempotenz und Reproduzierbarkeit des Datenbankzustands.
Warum Flyway verwenden?
- Schema-Versionierung: Jede Datenbankänderung ist eine eigene Version, die rückgängig gemacht oder angewendet werden kann.
- Automatisierung: Integration mit Maven, Gradle, Spring Boot und CI/CD-Pipelines.
- Integritätskontrolle: Flyway überprüft Prüfsummen von Migrationen, um unbeabsichtigte Änderungen an bereits ausgeführten Skripten zu verhindern.
- Einfachheit: Für die meisten Aufgaben reicht es, ein einfaches SQL-Skript zu schreiben.
Installation von Flyway für Java
Flyway wird nicht über pip oder npm installiert, da es sich um eine Java-Bibliothek handelt. Es gibt mehrere Möglichkeiten, sie zu einem Projekt hinzuzufügen:
1. Maven (pom.xml)
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>9.22.3</version> <!-- Aktuelle Version zum Zeitpunkt der Erstellung -->
</dependency>
<!-- Treiber für Ihre Datenbank, z. B. PostgreSQL -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.1</version>
</dependency>
2. Gradle (build.gradle)
implementation 'org.flywaydb:flyway-core:9.22.3'
implementation 'org.postgresql:postgresql:42.7.1'
3. Maven-Plugin (für die Ausführung über die Kommandozeile)
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>9.22.3</version>
<configuration>
<url>jdbc:postgresql://localhost:5432/mydb</url>
<user>myuser</user>
<password>mypassword</password>
</configuration>
</plugin>
4. Spring Boot (automatische Konfiguration)
Wenn Sie Spring Boot verwenden, reicht es, die Abhängigkeit hinzuzufügen und die Parameter in der application.properties zu konfigurieren:
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=myuser
spring.datasource.password=mypassword
Schnellstart mit einem Codebeispiel
Betrachten wir ein minimales Beispiel für die Verwendung von Flyway in einer Java-Anwendung, um eine Tabelle users zu erstellen.
Schritt 1: Erstellen Sie die Verzeichnisstruktur für Migrationen
Standardmäßig sucht Flyway nach SQL-Skripten im Ordner db/migration im Classpath (z. B. src/main/resources/db/migration).
Schritt 2: Erstellen Sie eine Migrationsdatei
Erstellen Sie eine Datei mit dem Namen V1__Create_users_table.sql in diesem Ordner:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);