In diesem Artikel wird die Verwendung von Flyway für Springboot eingeführt, um die Datenbankmigration zu aktivieren. Es wird mit Ihnen geteilt. Die Details sind wie folgt:
Lassen Sie mich zunächst verstehen, wie Flyway funktioniert.
Die einfachste Lösung ist, Flyway auf eine leere Datenbank zu zeigen.
Es wird versuchen, seinen Metadatentisch zu finden. Wenn die Datenbank leer ist, wird Flyway sie nicht finden, sondern erstellen. Sie haben jetzt eine Datenbank mit einer einzelnen leeren Tabelle mit dem Namen schema_version:
Diese Tabelle wird verwendet, um den Status der Datenbank zu verfolgen. Danach wird Flyway das Dateisystem oder den Klassenpfad der Anwendung zur Migration scannen. Sie können in SQL oder Java geschrieben werden.
Sortieren Sie dann die Migrationen nach ihrer Versionsnummer und bewerben Sie sich in der Reihenfolge:
Bei jeder Migration wird die Metadatentabelle entsprechend aktualisiert:
Schema_Version
Mit den Metadaten und dem Anfangszustand können wir nun über Migration zu neueren Versionen sprechen.
Flyway scannt das Dateisystem oder den Klassenpfad der Anwendung erneut zur Migration. Überprüfen Sie die Migrationen gegen Metadatentische. Wenn die Versionsnummern niedriger sind als oder gleich der als aktuellen Version gekennzeichneten Versionsnummer, werden sie ignoriert.
Die verbleibenden Migrationen sind ausstehende Migrationen ausstehend: verfügbar, aber nicht angewendet.
Dann sortieren sie nach der Versionsnummer und führen wiederum aus:
Diese Metadatentabelle wird aktualisiert, also:
Schema_Version
Das war's! Immer wenn Sie eine Datenbank entwickeln müssen, unabhängig davon, ob es sich um Struktur (DDL) oder Referenzdaten (DML) handelt, erstellen Sie einfach eine neue Migration mit einer höheren Versionsnummer als der aktuellen Version. Beim nächsten Start der Flyway entdeckt und aktualisiert es die Datenbank entsprechend.
2. Die Verwendung von Flyway im Springboot
Eine Möglichkeit besteht darin, die Eigenschaft hibernate.hbm2ddl.auto über die Spring-Boot-Eigenschaft des Spring-Boots zu erstellen, zu erstellen oder zu aktualisieren. Zum Beispiel können wir den folgenden Inhalt in application.yml hinzufügen:
Frühling: JPA: Hibernate: ddl-auto: create-drop
Dies ist jedoch nicht ideal für Produktionsumgebungen, da jedes Mal, wenn die Anwendung die Datenbank neu startet, das Schema entleert und von Grund auf neu aufgebaut wird. Es kann so eingestellt werden, dass sie aktualisieren, aber wir empfehlen es nicht, es für Produktionsumgebungen zu verwenden.
Es gibt einen anderen Weg. Wir können das Schema in Schema definieren. SQL. Beim ersten Lauf gibt es kein Problem damit, aber jedes Mal, wenn die Anwendung gestartet wird, schlägt dieses Initialisierungsskript fehl, da die Datentabelle bereits vorhanden ist. Dies erfordert zusätzliche Sorgfalt beim Schreiben von Initialisierungsskripten und nicht wiederholt die geleistete Arbeit.
Eine bessere Option ist die Verwendung der Datenbankmigrationsbibliothek. Es verwendet eine Reihe von Datenbankskripten und Datensätzen, die verwendet wurden und nicht mehrmals das gleiche Skript verwendet. Jedes Bereitstellungspaket einer Anwendung enthält diese Skripte, und die Datenbank kann mit der Anwendung übereinstimmen. Spring Boot bietet automatische Konfigurationsunterstützung für zwei beliebte Datenbank -Migrationsbibliotheken.
Wenn Sie eine dieser Bibliotheken im Spring Boot verwenden möchten, müssen Sie dem Projekt nur die entsprechenden Abhängigkeiten hinzufügen und ein Skript schreiben. Beginnen wir mit Flyway.
1. Verwenden Sie den Flyway, um den Datenbankmigrationsprozess zu definieren
Flyway ist eine sehr einfache Open -Source -Datenbank -Migrationsbibliothek, die SQL zum Definieren von Migrationsskripten verwendet. Die Idee ist, dass jedes Skript eine Versionsnummer hat und Flyway diese Skripte nacheinander ausführt, um die Datenbank in den gewünschten Status zu bringen. Es zeichnet auch den ausgeführten Skriptstatus auf und wird nicht wiederholt. Hier in der Anwendung "Leseliste" beginnen wir mit einer leeren Datenbank ohne Datentabellen und Daten. Daher muss dieses Skript zuerst Leser- und Buchtabellen erstellen, einschließlich Fremdschlüsseleinschränkungen und Initialisierungsdaten. Auflistung 8-2 des Codes ist ein Flyway-Skript von einer leeren Datenbank zu einem verfügbaren Status.
Flyway -Datenbank -Erstskript
Tabellenleser erstellen (iD serielle Primärschlüssel, Benutzername varchar (25) Eindeutig nicht NULL, Kennwort varchar (25), nicht null, fullname varchar (50), nicht null); Tabellenbuch erstellen (id serielle Primärschlüssel, Autor varchar (50) nicht null, Beschreibung Varchar (1000) NICHT NULL, ISBN VARCHAR (10) NICHT NULL, TITEL VARCHAR (250) NICHT NULL, reader_username varchar (25) nicht null, Fremdschlüssel (Reader_username) Referenzen Referenzen (Username)); Erstellen Sie Sequenz Hibernate_Sequence; Einfügen in den Reader (Benutzername, Passwort, FullName) -Werte ('Craig', 'Passwort', 'Craig Walls'); Wie Sie sehen können, ist das Flyway -Skript SQL. Was es zum Laufen bringt, ist der Standort und den Dateinamen im Klassenpfad. Flyway-Skripte folgen alle einer Benennungsspezifikation mit Versionsnummern, wie in Abbildung 8-1 gezeigt.
Alle Flyway -Skripte haben Namen, die mit dem Kapitalbuchstaben V beginnen, gefolgt von der Versionsnummer des Skripts. Gefolgt von zwei Unterstrichen und einer Beschreibung des Skripts. Da dies das erste Skript im gesamten Migrationsprozess ist, ist seine Version 1. Die Beschreibung kann sehr flexibel sein und wird hauptsächlich verwendet, um den Zweck des Skripts zu verstehen. Später müssen wir der Datenbank eine neue Tabelle hinzufügen oder der vorhandenen Datentabelle ein neues Feld hinzufügen. Sie können ein anderes Skript mit der Versionsnummer 2 erstellen. Das Flyway -Skript muss unter dem Pfad /DB /Migrationspfad relativ zum Anwendungsklassenpfad platziert werden. Daher muss im Projekt das Skript in SRC/Main/Ressourcen/DB/Migration platziert werden. Sie müssen auch Spring.jpa.hiberNate.ddl-auto auf keine festlegen, damit Hibernate keine Datentabellen erstellt. Dies bezieht sich auf den folgenden Inhalt in application.yml:
Frühling: JPA: Hibernate: DDL-Auto: Keine
Alles, was übrig bleibt, ist, Flyway als Projektabhängigkeit hinzuzufügen. In Gradle sieht diese Abhängigkeit so aus:
Compile ("org.flywaydb: flyway-core"))Im Maven -Projekt sieht es so aus:
<Depopenty> <gruppe> org.flywayfb </Groupid> <artifactId> flyway-core </artifactid> </abhängig>
Nachdem die Anwendung bereitgestellt und ausgeführt wurde, erkennt Spring Boot die Flyway im Klassenpfad und konfigurieren automatisch die erforderlichen Bohnen. Flyway wird die Skripte in /db /migration wiederum angezeigt und diese Skripte ausführen, wenn sie nicht ausgeführt wurden. Nachdem jedes Skript ausgeführt wurde, schreiben Sie einen Datensatz in die Tabelle schema_version. Wenn die Anwendung das nächste Mal gestartet wird, wird Flyway zunächst die Datensätze in schema_version ansehen und diese Skripte überspringen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.