Steffen Mall EXXETA AG

Mit Liquibase sind einfache und komplexe Refactorings des Quellcodes unkompliziert möglich, da nahezu alle Szenarien einer Schema- und Datenänderung möglich sind.

Wenn neue Anforderungen hereinkommen, versuchen viele Entwickler, diese gemäß dem existierenden Datenmodell abzuändern. Dabei liegt die Herausforderung aber nicht darin, den Code an ein neues Model anzupassen, sondern in der Struktur der Datenbank oder in der Migration von Daten. Das muss aber nicht sein: Ein flexibles Datenmodell ist einer der wichtigsten Eckpfeiler, um schnell und dynamisch fachliche Anforderungen zu implementieren.

Der Ansatz alter Entwicklerschule ist es, ein Datenbankschema mit Skripten zu verwalten. Daraus ergeben sich jedoch verschiedene Nachteile. Dieser Ansatz lässt sich häufig nicht automatisiert in den Build- und Deployment-Prozess integrieren. Außerdem ist es eine Herausforderung, verschiedene Datenbanktypen – lokale leichtgewichtige Datenbanken versus produktive Enterprise-Versionen – zu unterstützen. Bei der Ausführung auf verschiedenen Stages ist man auf den Betrieb angewiesen, und es wird keine Versionskontrolle zur Verfügung gestellt.

Alternativ dazu besteht die Möglichkeit, die Kontrolle des Schemas JPA zu überlassen. Das wird in der Regel allerdings nur für lokale Stages empfohlen. Der Vorteil dieser Herangehensweise liegt insbesondere in der engen Kopplung zum Implementierungsmodell. Wer diesen Ansatz schon genutzt hat weiß aber, dass man bei einem Refactoring schnell an die Grenzen stößt.

Mit Liquibase ist es möglich, eine Datenbankschemabeschreibung zu deklarieren und automatisiert ausführen zu lassen. Zusätzlich ist eine Versionskontrolle an Bord. Damit ist es möglich, das Datenbankmodell ohne Probleme kontinuierlich weiterzuentwickeln. Hierbei können nicht nur Schemaänderungen (DDL) durchgeführt, sondern auch Daten manipuliert werden (DML). Zudem lassen sich mit Bedingungen verschiedene Szenarien spezifisch behandeln. Mit CDI lässt sich die Ausführung von Liquibase nahtlos in das Deployment einer Applikation integrieren. Nicht zuletzt gewährleistet das Tool mittels JUnit das erfolgreiche Ausführen der Änderungen.

Die Grundlagen von Liquibase

In Liquibase werden alle Änderungen in einer Datei gemanagt. Dafür stehen verschiedene Formate zur Verfügung: XML, YAML, JSON und SQL. Für mein Beispiel habe ich das Format XML gewählt. Diese Datei ist die so genannte databaseChangeLog-Datei (Listing 1).

<?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-3.1.xsd">

</databaseChangeLog>

Innerhalb dieses databaseChangeLog lassen sich beliebig viele changeSets definieren. Ein changeSet ist, wie der Name schon sagt, ein Set an Änderungen. Jedes changeSet hat eine eindeutige ID und wird jeweils nur einmal gegen eine Datenbank ausgeführt. Beispiele sind das Anlegen einer neuen Tabelle, das Hinzufügen oder Löschen einer Spalte oder, etwas umfangreicher, das Hinzufügen eines neuen Constraints inklusive Anpassung der bestehenden Daten (Listing 2).

Den vollständigen Artikel lesen Sie in der Ausgabe:

Java Magazin 5.17 - "Spring 5"

Alle Infos zum Heft
579793760Continuous Database Integration mit Liquibase
X
- Gib Deinen Standort ein -
- or -