
von Zelkulon10. März 20251 min Lesezeit
Liquibase macht Datenbankmigrationen reproduzierbar, versioniert und sicher. Dieser Guide zeigt den kompletten Workflow von der ersten Migration bis zum Rollback.
Das Problem ohne Liquibase

Changelog-Struktur
src/main/resources/db/changelog/
├── db.changelog-master.yaml ← Master (importiert alle anderen)
├── 2024/
│ ├── 001-create-users-table.yaml
│ ├── 002-add-email-index.yaml
│ └── 003-create-orders-table.yaml
└── 2025/
├── 001-add-last-login-column.yaml
└── 002-create-audit-log.yaml# db.changelog-master.yaml
databaseChangeLog:
- includeAll:
path: db/changelog/2024/
- includeAll:
path: db/changelog/2025/Changeset: Tabelle erstellen
# 2024/001-create-users-table.yaml
databaseChangeLog:
- changeSet:
id: 2024-001-create-users
author: [email protected]
changes:
- createTable:
tableName: users
columns:
- column:
name: id
type: VARCHAR(36)
constraints:
primaryKey: true
nullable: false
- column:
name: email
type: VARCHAR(255)
constraints:
nullable: false
unique: true
- column:
name: created_at
type: TIMESTAMP
defaultValueComputed: CURRENT_TIMESTAMP
rollback:
- dropTable:
tableName: usersKomplexere Migration mit Kontext
# 2025/001-add-last-login.yaml
databaseChangeLog:
- changeSet:
id: 2025-001-add-last-login
author: [email protected]
preConditions:
onFail: MARK_RAN
tableExists:
tableName: users
changes:
- addColumn:
tableName: users
columns:
- column:
name: last_login_at
type: TIMESTAMP
# Nur in Test/Dev ausführen
- changeSet:
id: 2025-002-insert-test-data
context: "test,development"
changes:
- insert:
tableName: users
columns:
- column: { name: email, value: "[email protected]" }Rollback
# Via Maven Plugin
mvn liquibase:rollback -Dliquibase.rollbackCount=1
# Via CLI
liquibase rollback --tag=v1.0
liquibase rollbackCount 3Best Practices
- Changesets sind unveränderlich – bereits ausgeführte niemals ändern
- Immer Rollback-Anweisungen definieren
- Kontexte für umgebungsspezifische Migrationen (test, development)
- Numerisches Präfix (001-, 002-) für sortierte Ausführung
- In CI/CD: mvn liquibase:validate vor jedem Deployment
Fazit
- Reproduzierbar: Jede Umgebung ist garantiert auf demselben Stand
- Versioniert: Vollständige Geschichte aller Schemaänderungen
- Rollback-fähig: Migrationen können rückgängig gemacht werden
- CI/CD-ready: Automatische Ausführung bei jedem Deployment