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 **.
Spring Dependencies
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.
build.gradle
)dependencies {
implementation('org.flywaydb:flyway-core')
}
pom.xml
)<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.
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, lautet PUBLIC Bezeichnet 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 Migrationsskriptsclasspath: Geben Sie einen Speicherort im Klassenpfad anfilepath: Geben Sie ein Verzeichnis im Dateisystem an |
Referenz: Flyway Migrate Command [^ 1]
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.
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.sqlMigrationPrefix Eigenschaftenapplication.yml Kann 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
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.
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.
Migrating schema "PUBLIC" to version 1.0.0 - Create-InitialTable
Migrating schema "PUBLIC" to version 1.1.0 - Insert-InitialData
Wenn Sie die H2DB-Konsole überprüfen, können Sie in der Verlaufstabelle sehen, dass zwei Migrationsprozesse ausgeführt wurden.
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.
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.
Recommended Posts