[JAVA] Frühling mit Kotorin ―― 9. Datenbankmigration ―― Flyway

Übersicht / Beschreibung

Die meisten Webanwendungen verwenden Datenbanken zum Abfragen und Speichern von Daten. Daher haben wir zuvor eine Schicht in der Anwendung implementiert, die für die Datenbankverbindung verantwortlich ist.

Andererseits ändert sich das Layout der Datenbank im Allgemeinen, wenn die Anwendung wächst. Es ist unwahrscheinlich, dass sich dies gegenüber dem ursprünglichen Design nicht ändert. Daher ist es wichtig, den Status der Datenbank zu verwalten.

Ich denke, dass der Quellcode der Anwendung von Management-Tools wie Git versioniert wird. Das Tool (Framework), mit dem der Status der Datenbank auf dieselbe Weise versioniert wird, ist diesmal ** Flyway **.

flyway-logo-tm.png

Annahme / Umwelt

Laufzeitversion

Spring Dependencies

Entwicklungsumgebung

Vorgehensweise / Erklärung

Abhängigkeit hinzugefügt

Bearbeiten Sie zunächst die entsprechenden Definitionsdateien für Gradle (build.gradle) oder Maven ( pom.xml) und fügen Sie die Flyway-Abhängigkeit hinzu.

dependencies {
	implementation('org.flywaydb:flyway-core')
}
<dependency>
	<groupId>org.flywaydb</groupId>
	<artifactId>flyway-core</artifactId>
</dependency>

Wenn Sie beim ersten Erstellen eines Spring-Projekts Spring Initializr verwenden möchten, können Sie im Element Abhängigkeiten wie unten gezeigt "Flayway" hinzufügen. Ist möglich.

flyway-initilizr.png

Beschreibung der Datenbankverbindungsdefinition

Definieren Sie in application.yml (oder applyatation.properties) die Verbindungsdefinition der Datenbank, in die Flyway migriert, und die Einstellungen für das Verhalten von Flyway.

  flyway:
    enabled: true
    url: jdbc:h2:mem:app;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE
    schemas: PUBLIC
    user: guest
    password: guest
    baseline-on-migrate: true
    baseline-version: 1.0.0
    baseline-description: Initial
    locations: classpath:db/migration
Artikel Erläuterung
enabled Ob Flyway ausgeführt werden kann
Standard: true(Lauf)
url Zu migrierende Datenbankverbindungszeichenfolge
schemas Zielschema
Das Standardschema von H2DB, auf das diesmal abgezielt wird, lautetPUBLICBezeichnet für(Groß- und Kleinschreibung beachten und großschreiben)
user/password Benutzer-ID der Datenbankverbindung/Passwort
baseline-on-migrate Gibt an, ob die Ausführungsversion des Flyway-Migrationsskripts in der Mitte gestartet werden soll
Standard: false(Alles erledigt ab der ersten Version)
baseline-version baseline-on-Version, die gestartet werden soll, wenn die Migration wahr ist
baseline-description baseline-Kommentare, die bei der Implementierung in der Version aufgezeichnet wurden
locations Speicherort des Migrationsskripts
classpath:Geben Sie einen Speicherort im Klassenpfad an
filepath:Geben Sie ein Verzeichnis im Dateisystem an

Referenz: Flyway Migrate Command [^ 1]

Platzierung des Datenbankmigrationsskripts

Flyway führt das platzierte SQL automatisch basierend auf den festgelegten Regeln aus und führt die Migration aus. Standardmäßig ist der Speicherort des Skripts das folgende Verzeichnis, das unter "src / main / resources" erstellt wurde.

db-migration-dir.png

SQL-Dateien in "db / migration" müssen Dateinamen haben, die den von Flyway anerkannten Namenskonventionen entsprechen. Die Namenskonvention lautet wie folgt.

Artikel Erläuterung
PREFIX Der Standardwert istV
Flyway scannt und führt Dateien ab V aus
flyway.sqlMigrationPrefixEigenschaftenapplication.ymlKann definiert und geändert werden in
VERSION Punkt(.)Oder unterstreichen(_)Kann Hauptversion und Nebenversion mit trennen
Die Version muss ab 1 beginnen
DESCRIPTION Artikel zur Beschreibung Notation
Drücken Sie die Änderungen in der entsprechenden Version einfach aus

Beispiel: V1.0.0_my_first_flyway.sql

Erstellen eines Datenbankmigrationsskripts

V1.0.0-Tabelle erstellen

Definieren Sie zuerst die DDL, die die Tabelle erstellt.

CREATE TABLE message (
    id VARCHAR(36) NOT NULL PRIMARY KEY,
    title VARCHAR(255),
    message VARCHAR(255),
    created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

Führen Sie die Anwendung aus.

$ ./gradlew clean bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.1.RELEASE)
  :
  :
2019-03-28 13:26:52.822  INFO 7128 --- [           main] o.f.c.internal.license.VersionPrinter    : Flyway Community Edition 5.2.4 by Boxfuse
2019-03-28 13:26:53.118  INFO 7128 --- [           main] o.f.c.internal.database.DatabaseFactory  : Database: jdbc:h2:mem:app (H2 1.4)
2019-03-28 13:26:53.254  INFO 7128 --- [           main] o.f.core.internal.command.DbValidate     : Successfully validated 1 migration (execution time 00:00.018s)
2019-03-28 13:26:53.280  INFO 7128 --- [           main] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table: "PUBLIC"."flyway_schema_history"
2019-03-28 13:26:53.329  INFO 7128 --- [           main] o.f.core.internal.command.DbMigrate      : Current version of schema "PUBLIC": << Empty Schema >>
2019-03-28 13:26:53.331  INFO 7128 --- [           main] o.f.core.internal.command.DbMigrate      : Migrating schema "PUBLIC" to version 1.0.0 - Create-InitialTable
2019-03-28 13:26:53.358  INFO 7128 --- [           main] o.f.core.internal.command.DbMigrate      : Successfully applied 1 migration to schema "PUBLIC" (execution time 00:00.089s)
  :
  :

Aus dem Startprotokoll können Sie ersehen, dass der Tabellenerstellungsprozess von Flyway "Migrieren des Schemas" PUBLIC "auf Version 1.0.0 --Create-InitialTable" durchgeführt wurde.

Wenn Sie die H2DB-Konsole wie unten gezeigt überprüfen, können Sie auch sehen, dass die Verarbeitung von 1.0.0 in der Flyway-Verlaufstabelle wie unten gezeigt aufgezeichnet ist.

flyway_1_0_0.png

V1.1.0-Daten hinzufügen

Definieren Sie als Nächstes die SQL, die der erstellten Tabelle Daten hinzufügt.

INSERT INTO message(id, title, message) VALUES ('7b23257c-e9d9-4d1e-ba79-01f8b8715ba9', 'INIT', 'Inserted by FLYWAY');

INSERT INTO message(id, title, message) VALUES ('12345678-e9d9-4d1e-ba79-01f8b8715ba9', 'INIT', 'Inserted by FLYWAY');

Führen Sie die Anwendung wie zuvor aus.

$ ./gradlew clean bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.1.RELEASE)
  :
  :
2019-03-28 13:43:30.226  INFO 7430 --- [           main] o.f.c.internal.license.VersionPrinter    : Flyway Community Edition 5.2.4 by Boxfuse
2019-03-28 13:43:30.431  INFO 7430 --- [           main] o.f.c.internal.database.DatabaseFactory  : Database: jdbc:h2:mem:app (H2 1.4)
2019-03-28 13:43:30.588  INFO 7430 --- [           main] o.f.core.internal.command.DbValidate     : Successfully validated 2 migrations (execution time 00:00.029s)
2019-03-28 13:43:30.617  INFO 7430 --- [           main] o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table: "PUBLIC"."flyway_schema_history"
2019-03-28 13:43:30.658  INFO 7430 --- [           main] o.f.core.internal.command.DbMigrate      : Current version of schema "PUBLIC": << Empty Schema >>
2019-03-28 13:43:30.659  INFO 7430 --- [           main] o.f.core.internal.command.DbMigrate      : Migrating schema "PUBLIC" to version 1.0.0 - Create-InitialTable
2019-03-28 13:43:30.694  INFO 7430 --- [           main] o.f.core.internal.command.DbMigrate      : Migrating schema "PUBLIC" to version 1.1.0 - Insert-InitialData
2019-03-28 13:43:30.713  INFO 7430 --- [           main] o.f.core.internal.command.DbMigrate      : Successfully applied 2 migrations to schema "PUBLIC" (execution time 00:00.107s)

Im Startprotokoll können Sie sehen, dass das hinzugefügte Migrationsskript ausgeführt wird.

Wenn Sie die H2DB-Konsole überprüfen, können Sie in der Verlaufstabelle sehen, dass zwei Migrationsprozesse ausgeführt wurden.

flyway_1_1_0.png

Wenn Sie die erstellte Tabelle "MESSAGE" abfragen, wird die als Migrationsskript definierte SQL wiedergegeben und Sie können bestätigen, dass die Daten hinzugefügt wurden.

flyway_1_1_0-select-data.png

Zusammenfassung / Rückblick

Migration-1-2.png

Bei der Entwicklung einer Anwendung ändert sich das Datenbanklayout häufig, und die damit verbundene Arbeit wie die Datenregistrierung tritt häufig auf. Es ist auch erforderlich zu verwalten, wann das Layout geändert wird (Anforderungen). Wenn Sie die Datenbank mit diesem Flyway verwalten, können Sie den Zeit- und Arbeitsaufwand für solche Arbeiten reduzieren.

Diese Quelle

Recommended Posts

Frühling mit Kotorin ―― 9. Datenbankmigration ―― Flyway
Frühling mit Kotorin ―― 1. SPRING INITIALIZR
Frühling mit Kotorin - 8 Repository-Schicht - Ergänzung: H2-Datenbank
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
Frühling mit Kotorin --- 8. Aufbewahrungsschicht
Feder mit Kotorin --6 Asynchrone Verarbeitung
Feder mit Kotorin ―― 7. Serviceschicht
Feder mit Kotorin --4 REST API Design
Ich habe Flyway mit Spring Boot ausprobiert
Feder mit Kotorin ―― 3. Auslassen von Wellenklammern aus der Funktion
[Java] DB-Migration (Flyway)
Selbstgemachte Validierung mit Spring
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Mit Kotorin ―― 7. Scoping-Funktion
Mit Spring Boot herunterladen
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Java-Konfiguration mit Spring MVC
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Anmeldefunktion mit Spring Security
Verwenden von Mapper mit Java (Spring)
Spring Boot beginnend mit Docker
Fehler in der Spring-Datenbankverbindung
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
API mit Spring + Vue.js verknüpfen
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Koexistenz von Flyway in der eingebetteten Datenbank (h2) der Entwicklungsumgebung und der Release-Datenbank (SQL Server) mit Spring Boot