Datenbankmigrationen in Java: Überblick über beliebte Tools

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenbankmigrationen in Java: Warum sie nötig sind und wie sie funktionieren



Die Entwicklung jeder ernsthaften Java-Anwendung ist untrennbar mit der Weiterentwicklung des Datenbankschemas verbunden. Das Hinzufügen neuer Felder, das Ändern von Datentypen, das Erstellen von Indizes – all das ist im Laufe der Projektentwicklung unvermeidlich. Die manuelle Ausführung von SQL-Skripten in verschiedenen Umgebungen (lokale Entwicklungsumgebung, Testumgebung, Produktion) führt schnell zu Chaos: Skripte gehen verloren, werden in der falschen Reihenfolge ausgeführt, und die Datenbank eines Teams unterscheidet sich von der eines anderen. Die Lösung für dieses Problem sind Datenbankmigrationen (database migrations).



Migrationen ermöglichen es, Schemaänderungen zu versionieren, sie automatisch in der richtigen Reihenfolge anzuwenden und bei Bedarf rückgängig zu machen. In der Java-Welt gibt es zwei unangefochtene Spitzenreiter in diesem Bereich: Flyway und Liquibase. Betrachten wir sie genauer.



Flyway: Einfachheit und Zuverlässigkeit



Flyway ist ein leichtes, einfaches und leistungsstarkes Migrationstool. Seine Philosophie: „Migrationen sind einfach SQL oder Java-Klassen“. Die grundlegenden Arbeitsprinzipien:



  • Versionierung: Jede Migrationsdatei hat eine eindeutige Versionsnummer (z. B. V1__create_users.sql, V2__add_email.sql).
  • Ausführungsreihenfolge: Flyway verfolgt die angewendeten Migrationen in einer speziellen Tabelle (flyway_schema_history) und wendet nur neue an.
  • Zwei Migrationstypen: SQL-Skripte und Java-Migrationen (für komplexe Logik).
  • Rückgängigmachen: „Undo“-Migrationen werden unterstützt (in der kostenpflichtigen Version) oder das manuelle Schreiben von Rollback-Skripten.


Beispiel für die Arbeit mit Flyway



Angenommen, Sie müssen eine Benutzertabelle erstellen. Sie erstellen die Datei db/migration/V1__create_users.sql:



CREATE TABLE users (    id BIGINT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(50) NOT NULL,    email VARCHAR(100) NOT NULL,    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);


Dann fügen Sie eine zweite Migration V2__add_age.sql hinzu:



ALTER TABLE users ADD COLUMN age INT;


Die Einbindung von Flyway in eine Spring Boot-Anwendung erfolgt über application.properties:



spring.flyway.enabled=truespring.flyway.locations=classpath:db/migrationspring.datasource.url=jdbc:postgresql://localhost:5432/mydbspring.datasource.username=userspring.datasource.password=pass


Beim Start der Anwendung überprüft Flyway selbstständig die Historientabelle und wendet alle neuen Migrationen an. Wenn eine Migration bereits ausgeführt wurde, wird sie übersprungen.



Liquibase: Flexibilität und Kontrolle



Liquibase ist ein flexibleres und leistungsstärkeres Tool, das mehrere Formate zur Beschreibung von Änderungen unterstützt: XML, YAML, JSON und SQL. Seine Hauptfunktion sind Changesets (Änderungssätze).



  • Eindeutige Kennung: Jedes Changeset hat eine id und einen author.
  • Automatische SQL-Generierung: Liquibase kann SQL für bestimmte DBMS (PostgreSQL, MySQL, Oracle usw.) generieren.
  • Kontexte: Migrationen können für verschiedene Umgebungen (dev, test, prod) getrennt werden.
  • Rückgängigmachen: Jedes Changeset kann eine Anweisung zum Rückgängigmachen (rollback) enthalten.


Beispiel für die Arbeit mit Liquibase



Beispiel für ein Changeset im XML-Format (db/changelog/db.changelog-master.xml):



<?xml version="1.0" encoding="UTF-8"?><databaseChangeLog    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.9.xsd">

<changeSet id="1" author="pythonlib"> <

Empfehlungen