Skip to content
This repository has been archived by the owner on Sep 7, 2020. It is now read-only.

Datenbank Migration

fbaldus edited this page Jul 16, 2019 · 1 revision

Um Datenbankänderungen auch in der Produktion aufspielen zu können, wurden die beiden Tools Flyway und Liquibase getestet. Dabei hat sich Flyway als einfacher in der Bedienung herausgestellt, da es sich bei den einzelnen Migrationen um SQL Skripte handelt, die einfach ausgeführt werden. Liquibase dagegen verwendet eine XML Syntax, um Änderungen an der Datenbank zu beschreiben. Deshalb wird im Folgenden die Migration mittels Flyway beschrieben.

Funktion von Flyway

In der Projektmappe befindet sich ein Ordner (migration) mit allen SQL Update Skripten. Der Dateiname der Skripe setzt sich immer aus einer Versionsnummer und dem Namen zusammen. Bei Start des Services überprüft Flyway welche dieser Skripte noch nicht ausgeführt wurden und führt diese aus. Die aktuelle Version der Datenbank speichert Flyway in der Migration History Tabelle, um Skripte nicht doppelt auszuführen.

Vorbereitung / Installation:

Flyway lässt sich mit geringem Aufwand in das Projekt integrieren. Dazu sind nur die folgenden Schritte notwendig:

1. Dependency hinzufügen:

Zuerst müssen die folgenden Dependencies zum Projekt hinzugefügt werden:

<dependency>
   <groupId>org.flywaydb</groupId>
   <artifactId>flyway-core</artifactId>
</dependency>

2. Properties bearbeiten

Anschließend muss das Datenbank Schema für Flyway expliziet gesetzt werden. In diesem Beispiel für den Project-Service. Zusätzliche sollte von Create auf Validate umgestellt werden, damit keine automatischen Updates von Hibernate ausgeführt werden und sichergestellt ist, dass die Datenbank zum Model passt.

#Flyway (prod)
spring.flyway.schemas=project-db
spring.jpa.hibernate.ddl-auto=validate

3. Migration Ordner erstellen

Zuletzt wird im Ordner 'resources' der Unterordner 'db/migration' angelegt. In diesem Ordner werden anschließend alle Migration Skripte abgelegt.

Anleitung: Neue Migration

Skript erstellen

Um ein Updatescript zu generieren, kann die Konfiguraiton db-migration verwendet werden. Diese verwendet im Gegensatz zur local Konfiguration eine Postgres-DB und kein H2. Dadurch können auch Update-Skripte erstellt werden. Im Projektverzeichnis liegt ein entsprechendes docker-compose file für die Postgres-DB. Durch folgende Ergänzung in application-db-migration.properties wird bei jedem Start der Anwendung ein Updatescript erzeugt.

spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=update
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=update.sql

Anschließend die Anwendung starten. Dadurch wird die Datei update.sql im root Verzeichnis des Projektes erzeugt. Diese kann als Ausgangsbasis für das Updateskript verwendet werden. Es ist empfehlenswert, mindestens die Datei zu öffnen und die Sinnhaftigkeit der Änderungen zu prüfen. Für komplexere Änderungen an der Datenbank ist es notwendig, die Skripte manuell zu schreiben.

Veröffentlichen

Das neue Update Skript im Migration Ordner ablegen (Filename beachten!):
V{Major_Minor}__Name.sql
Wichtig: Version und Name werden durch ZWEI Unterstriche getrennt: __
Bsp:
V0__init.sql
V1__Dozent.sql
V1_1__Rename.sql

Beim Start des Services führt Flyway alle noch nicht ausgeführten Skripte aus. Der aktuelle Status wird in der Tabelle Schema_history gespeichert.