<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-liquibase</artifactId>
</dependency>
Konzept, Technologien, Liquibase
David Lehner
Verwaltung und Nachverfolgung von Änderungen
Änderungen (Anwendung auf verschiedenen Systemen)
Verlorene Informationen in der Entwicklung, Nachvollziehen von Änderungen
Fehlersuche / Rollback
Inkonsistenz zwischen verschiedenen Umgebungen
Teamstruktur
Neue Funktionalität fordert Datenbankänderung
Umsetzung ohne Versionierung
Im Backend kommt es zu Fehlern
Rollback
Synchonisationsproblem
Einsatz von Tools zur Datenbankversionierung wie Liquibase.
Zentralisierte Verwaltung von Datenbankänderungen (Versionierung)
Synchronisierung der Datenbank
Rollback-Mechanismus
Konsistenz
Open-Source-Lösung für Datenbankversionierung.
Unterstützt diverse Datenbanken (auch NoSQL)
Changelog (File mit allen Änderungen)
Changeset (Enthält Änderung)
Änderungstyp (create…, add…)
docs.liquibase.com/concepts/connections/creating-config-properties.html
Quarkus maven dependency
Liquibase properties file
ChangeLog.xml
brew install liquibase
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-liquibase</artifactId>
</dependency>
Änderungen immer in ChangeLogs
<changeSet author="david" id="1" labels="testing">
<createTable tableName="quarkus">
<column name="ID" type="VARCHAR(255)">
<constraints nullable="false"/>
</column>
<column name="NAME" type="VARCHAR(255)"/>
</createTable>
</changeSet>
liquibase rollback-count --count=2
-''- rollback --tag=test
auch programmatisch möglich
<changeSet id="tag-quarkus" author="david" labels="testingAll">
<tagDatabase tag="createQuarkusTable"/>
</changeSet>
liquibase update
liquibase rollback --tag=tagname
liquibase rollback-count --count=4
liquibase generateChangeLog --changeLogFile=fileName
liquibase --output-file=<filename> snapshot --snapshot-format=<format(json…)>
Changelog Struktur
Root-ChangeLog
Files nach Versionen, oder Entitäten
Maximal eine Änderung pro ChangeSet
liquibase update --changelog-file=masterChangelog.xml \
--url=<Database URL> \
--username=<username> \
--password=<password>
Flyway
Open-Source
Grundprinzip gleich
Basierend auf Java
CLIs vorhanden
Hohe Unterstützung verschiedener Datenbanken
Einfachere Darstellung von Veränderungen (SQL vs. SQL, XML, YAML, JSON)
Striktere Namensgebung bei Flyway
V = Versionised
U = Undo
R = Repeatable
BSP: V01__Add_New_Column.sql
Keine Filename Conventions bei Liquibase
Ein "Haupt-file" beinhaltet alle Veränderungen und Referenzen auf andere Files
Reihung klarer bei Liquibase
Liquibase: Nach definition in Root-File
Flyway: In Filename angeben
ChangeSet erstellen, welches die Änderungen beinhaltet
liquibase update - Datenbank ändern
Änderungen am Code vornehmen, falls nötig
Applikation mit Datenbank testen
Commit von Applikation und Changeset
Änderungen gespeichert
Rollback feature, bei Fehlern oder arbeiten auf gemeinsamer DB
Fehleranfälligkeit vermindert
Einbindung in jeweilige CI/CD pipelines
Höherer Aufwand bei Erstellung des Projekts
Funktionalität mit ORM etwas umständlich