JavaRush /Java-Blog /Random-DE /SpringBoot + Flyway – „Java-Projekt von A bis Z“

SpringBoot + Flyway – „Java-Projekt von A bis Z“

Veröffentlicht in der Gruppe Random-DE
Ein Artikel aus einer Reihe über die Erstellung eines Java-Projekts (Links zu anderen Materialien finden Sie am Ende). Sein Ziel ist es, Schlüsseltechnologien zu analysieren, das Ergebnis ist das Schreiben eines Telegram-Bots. In diesem Teil versuchen wir, SpringBoot und Flyway zu starten. Das Minimum an Theorie, wie Sie möchten))) Wir lassen den abschließenden Vergleich von Flyway/Liquibase auf unbestimmte Zeit aus und kommen zur Sache. Und trotzdem hat es sich schon hingezogen. Um Flyway nicht zweimal zu beschreiben, habe ich beschlossen, es sofort zu unserem zukünftigen JRTB-Projekt hinzuzufügen.„Java-Projekt von A bis Z“: SpringBoot + Flyway – 1

Was müssen wir dabei tun?

  1. Starten Sie eine SpringBoot-Anwendung basierend auf Maven.
  2. Fügen Sie dort Flyway hinzu: Glücklicherweise lassen sie sich problemlos integrieren.
  3. Fügen Sie ein Schema für die Tabellen hinzu, die wir in der Beispieldatenbank haben.
Auf diese Weise lernen wir, wie man mit Flyway arbeitet. Warum ein separates Projekt und nicht direkt in unser JRTB? Denn später hat jeder, der verstehen möchte, wie das geht, ein Projekt mit einem Beispiel und einen Artikel, der die Arbeit damit beschreibt. Also, lasst uns gehen!

Was ist Flyway?

Um etwas zu verwenden, müssen Sie zunächst herausfinden, was es ist und warum. Flyway ist ein Tool zur Datenbankversionskontrolle. Die Worte sind bekannt, aber irgendwie ist das Verständnis nicht dazugekommen, oder? Versuchen wir, das Problem zu beschreiben, das Flyway löst. Nehmen wir an, wir haben ein Projekt. Wie alles in unserer Welt ist es nicht perfekt, daher war es nicht möglich, die endgültige Version des Projekts zu planen und auszuarbeiten. Jedes Mal tauchen bestimmte unerklärte Nuancen auf. Das Projekt nutzt bei seiner Arbeit eine Datenbank. Wenn sich das Projekt ändert, kann sich natürlich auch die Datenbankstruktur ändern. Nehmen wir an, wir fügen ein neues Feld für eine der Entitäten in unserem Projekt hinzu. Wie kann man das machen?
  1. Fügen Sie dieses Feld zu unserer Entität hinzu und aktualisieren Sie alles, damit die Geschäftslogik funktioniert.
  2. Aktualisieren Sie die Datenbank. Die einzig mögliche Möglichkeit besteht darin, dies manuell zu tun. Dazu müssen Sie das erforderliche SQL-Skript registrieren.
Der zweite Punkt wirft viele Fragen auf:
  1. Aber wenn wir mehr als einen Ort haben, an dem wir unser Projekt einsetzen, muss dies dann an jedem Ort geschehen?
  2. Und wenn wir zurückgehen wollen, woher wissen wir dann genau, in welchem ​​Zustand sich die Datenbankstruktur jetzt befindet?
  3. Wie können wir sicher sein, dass die Datenbankänderung erfolgreich war?
  4. Wie kann ich die Möglichkeit erhalten, alle Datenbankänderungen zu verfolgen, die im Projekt vorgenommen wurden?
Wenn Sie es manuell tun, werden die Antworten nicht die besten sein... Um all diese Schwierigkeiten zu vermeiden, können Sie ein Datenbankmigrationstool verwenden. Eines davon ist Flyway. Was ist sein Job? Im Rahmen des Projekts speichern wir separate SQL-Dateien (sog. Migrationen), in denen alles gespeichert ist, was wir gleichzeitig mit der Datenbank machen. Alle Migrationen erfolgen strikt in einer bestimmten Reihenfolge, sodass Sie Änderungen in der Struktur und den Daten der Datenbank verfolgen können (häufig werden bei der Migration Testdaten zum Projekt hinzugefügt, sodass bei der Bereitstellung auf einem Server bereits welche vorhanden sind). Werte, mit denen Sie das Projekt testen können). Nachdem die Tests bestanden wurden, werden Migrationen gestartet, wenn das Projekt erstellt wird. Sie stellen eine Verbindung zur Datenbank her und führen Migrationen durch. Wenn in dieser Datenbank bereits Migrationen durchgeführt wurden, überspringt Flyway diese einfach (Daten zu Migrationen und deren Status werden in einer separaten Tabelle in der Datenbank gespeichert, was bei deren Verwaltung hilft). Wenn eine Migration nicht erfolgreich war, wird das Projekt gelöscht Build und seine Bereitstellung (Bereitstellung) auf dem Server werden gestoppt. Ich habe versucht, es so detailliert wie möglich zu beschreiben. Wenn noch nicht alles ganz klar ist, macht es nichts: Mit der Übung kommt das Verständnis.

Starten Sie SpringBoot + Flyway

Was ist Spring Boot?

Was starten wir? ... Um zu verstehen, was und warum wir tun, müssen Sie entscheiden, was SpringBoot ist. Lassen Sie uns zunächst kurz (naja, sehr schnell) über den Frühling sprechen . Derzeit ist es der De-facto-Industriestandard bei der Entwicklung von Serveranwendungen in Java. Standard von was? Wie kann ich Ihnen das erklären? Spring ist das Grundgerüst der Anwendung, auf das wir dann das „Fleisch“ werfen – unsere Geschäftslogik. Mit Hilfe von Spring (im Folgenden werde ich dieses Transparentpapier verwenden, um keine Zeit mit dem Wechseln der Sprache zu verschwenden :D)) gibt uns Spring einen Ausgangspunkt, von dem aus wir beginnen, alles zu tun. Es ist vielfältig, multimodular:
  1. Möchten Sie mit einer Datenbank arbeiten? Möchten Sie relational? Willst du nicht-relational? Hier sind wir bei Spring Data.
  2. Möchten Sie mit http-Anfragen arbeiten? Bitte schön, Spring Web (Spring MVC).
  3. Benötigen Sie einen Container für alle Ihre Gegenstände an einem Ort? Hier ist Spring Core.
  4. Müssen Sie die Sicherheit für ein Projekt so einrichten, dass es unterschiedliche Rollen und Befehlsketten gibt? Frühlingssicherheit.
  5. Gerade als Sie dachten, es wäre schön, so etwas zu haben, stellt sich heraus, dass Spring bereits alles hat, was Sie brauchen, und es lässt sich schnell und einfach integrieren.
Daher können wir sagen, dass es sich nicht nur um ein Framework (eine so riesige Bibliothek) handelt, sondern um ein ganzes Ökosystem, das sich rasant entwickelt. Um zu verstehen, was Spring Core ist, also die Basis, mit der Module verbunden sind, empfehle ich Ihnen, sich eine Live-Demo zum Erstellen Ihres eigenen Frameworks anzusehen. Gastgeber ist Evgeny Borisov, ein sehr cooler Typ im Bereich Java und Spring. Tun Sie alles, was er getan hat, und die Arbeit des Frühlings wird Ihnen klarer werden. SpringBoot wiederum ist der Gipfel von allem, was sie haben. Die Magie von reinem Wasser. Mindesteinstellungen für den ersten Start der Anwendung. Natürlich erhalten Sie dadurch kein Verständnis dafür, wie man es benutzt und was zu tun ist. Doch bevor man sich in die Tiefen der Entwicklung stürzt, muss man alles aus der Vogelperspektive betrachten.

SpringBoot starten

Da wir bereits verstanden haben, was Maven ist, erstellen wir ein neues Projekt für unsere Bedürfnisse. Dazu müssen Sie lediglich eine speziell dafür erstellte Website aufrufen. Es heißt Spring Initializr . „Java-Projekt von A bis Z“: SpringBoot + Flyway – 2Hier müssen Sie ausfüllen und auswählen, was Sie benötigen:
  1. Das Projekterstellungstool ist Gradle oder Maven. Wie Sie sehen, wird Ant nicht einmal mehr erwähnt. Dies ist ein guter Hinweis darauf, welche Build-Tools Ihre Zeit wert sind.
  2. Die Sprache, in der Sie schreiben können, ist Java, Kotlin, Groovy. Hier ist alles einfach: Sie sind alle JVM-ähnlich und führen problemlos Java-Code aus. Es lohnt sich übrigens, einen Blick auf Kotlin zu werfen. Groovy ist ehrlich gesagt uninteressant geworden (es gab eine Zeit, in der man auf Grooves umgestiegen ist, aber das ist schnell vorbei).
  3. Frühlingsversion... Hier müssen Sie verstehen, dass die Versionen des Hauptteils von Spring und seiner Module konsistent sind.
  4. Projektdaten. Ich habe diese Dinge bereits beschrieben.
  5. Wir wählen aus, welches Archiv gesammelt werden soll – Jar oder War.
  6. Nun, die Java-Version unseres Favoriten. Und in letzter Zeit gibt es viele dieser Versionen ... Sie haben jahrelang gewartet, und jetzt gibt es zwei pro Jahr.
In unserem Fall werden wir dieses Projekt in der JavaRush-Community- Organisation veröffentlichen , sodass die Informationen über das Projekt angemessen sind:
  1. Maven – nicht umsonst haben wir vorhin mit Ihnen darüber gesprochen.
  2. Java ist unser Liebling :D
  3. Nehmen wir Version 2.2.11. Warum nicht das Neueste? Denn je neuer es ist, desto größer ist die Wahrscheinlichkeit, dass es dort einige Fehler gibt. Für uns spielt es keine Rolle, welche Version, aber die ältere wird zuverlässiger sein. Daher wählen wir 2.2.11.
  4. Gruppe: com.github.javarushcommunity
  5. Artefakt: springboot-flyway-demo
  6. Name: SpringBoot + Flyway-Demo
  7. Beschreibung: Das Projekt demonstriert die Integration zwischen SpringBoot und Flyway . (Ja, die Fähigkeit, Dokumentationen zu schreiben, ist ein wichtiger Teil der Entwicklung :))
  8. Paketname: com.github.javarushcommunity.springbootflywaydemo . Hier erstellen sie für uns sofort ein Basispaket mit einer Klasse, die unsere Anwendung startet.
  9. Verpackung: Glas
  10. Java: 8. Gehen wir nicht der Lokomotive voraus und nehmen wir die gute alte Acht. Warum nicht 11? Und warum? Für unser Beispiel sehe ich keinen Sinn.
„Java-Projekt von A bis Z“: SpringBoot + Flyway – 3Nun fügen wir die Module hinzu. Wir müssen eine Integration mit Flyway finden. Sie können auch etwas hinzufügen, das mit MySQL und Spring Data zu tun hat. Fügen wir einen weiteren Lombok hinzu (das ist eine sehr notwendige Sache, vertrau mir einfach vorerst :D)) Klicken Sie dazu auf ABHÄNGIGKEITEN HINZUFÜGEN ... und wählen Sie alles aus, was Sie brauchen: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 4So fügen wir Flyway hinzu. „Java-Projekt von A bis Z“: SpringBoot + Flyway – 5Lombok... Und so weiter. Als Ergebnis erhalten wir: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 6Huh... wir haben alles ausgefüllt)) Jetzt auf GENERIEREN klicken... und fertig - das Archiv mit dem generierten Projekt ist fertig :) Es gibt auch so eine coole Sache wie TEILEN... , Dadurch erhalten Sie einen Link zu der Seite, die Sie gerade ausgefüllt haben. Das heißt, hier ist das, was ich generiert habe . Und selbst wenn etwas schief geht, können Sie es jederzeit über den Link überprüfen. Als nächstes müssen wir das erstellte Projekt mit dem Git-Repository verknüpfen, also klonen wir das erstellte springboot-flyway-demo- Projekt und laden es über IDEA herunter. Dazu müssen Sie die Idee öffnen und Datei -> Neu -> Projekt aus vorhandenen Quellen... auswählen : „Java-Projekt von A bis Z“: SpringBoot + Flyway – 7Fügen Sie nun die URL hinzu und klicken Sie auf Klonen . Der nächste Schritt besteht darin, die Interna des generierten Projekts in das von uns geklonte Projekt zu übertragen. Verwirrt? Ich werde es dir jetzt zeigen. Ich habe es entpackt und folgende Dateien erhalten: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 8Diese müssen in das geklonte Projekt übertragen werden. Fügen wir wie im vorherigen Artikel pom.xml als Maven-Projekt hinzu: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 9Nun interessiert uns, was für uns generiert wurde. Wenn Sie alle Ordner in src und darüber hinaus öffnen, sehen Sie die übliche Hierarchie in Maven-Projekten, die wir im vorherigen Artikel besprochen haben . Wer es noch nicht gelesen hat, sollte es lesen! „Java-Projekt von A bis Z“: SpringBoot + Flyway – 10Es ist ersichtlich, dass wir eine Anwendungsklasse haben und unsere SpringBoot-Anwendung damit gestartet wird. Dank des Maven-Plugins für SpringBoot haben wir jetzt die Aufgabe, die wir für Maven brauchen, nämlich spring-boot:run. Wo finden wir diese Informationen? Rechts öffnen wir die Maven-Platte und unser Projekt: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 11Es wird ein Fehler auftreten und wir können ihn nicht lesen. Wir sehen etwa Folgendes: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 12Um mehr Informationen zu erhalten, können wir aus Geschwindigkeitsgründen die Hauptmethode von ausführen die Anwendungsklasse: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 13Und dann werden wir den wahren Grund sehen: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 14Hier gibt es bereits mehr Informationen und man kann damit etwas anfangen. Was ist los? Wir haben Abhängigkeiten, die mit der Datenbank verbunden sind, und müssen daher Einstellungen für die Verbindung mit ihr bereitstellen. Dazu googeln wir und stellen fest, dass wir die folgenden Konfigurationen zu application.properties hinzufügen müssen:
spring.datasource.url=jdbc:mysql://localhost:3306/flyway_demo_db
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Wir führen die Hauptmethode erneut aus und erhalten: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 15Jetzt müssen wir mindestens eine Migration hinzufügen. Um eine Migration korrekt zu erstellen, müssen Sie die folgende Vorlage verwenden: V<VERSION>__<NAME>.sql Mit dieser Vorlage erstellen wir eine Migrationsdatei mit dem Namen V00001__Create_country_table.sql im entsprechenden Ordner: /src/main/resources/ db.migration/ . Lassen Sie uns darin eine Ländertabelle erstellen. Nehmen wir das Skript aus dem zweiten Artikel über die Datenbank . „Java-Projekt von A bis Z“: SpringBoot + Flyway – 16Bevor wir beginnen, erstellen wir zunächst eine Datenbank für die Arbeit: flyway_demo_db. Machen wir das über MysqlWorkbench: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 17Jetzt können wir die Hauptmethode erneut ausführen: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 18Alles hat geklappt, aber da wir noch nichts im Projekt haben, funktioniert es nicht mehr. Aus den Protokollen ( lesen Sie , was Protokolle sind ) geht jedoch klar hervor, dass:
  1. Erfolgreich mit der Datenbank verbunden.
  2. Die Migration wurde validiert und alles ist in Ordnung.
  3. Flyway hat eine Tabelle zur Verwaltung von Migrationen erstellt.
  4. Und was Migration 00001 begann – die Gründung des Landes war erfolgreich.
Um dies zu überprüfen, können Sie nachsehen, was in der Datenbank geschieht. Gehen wir also zu unserem MySQL-Server und sehen, was mit den Tabellen in der Datenbank flyway_demo_db los ist: $ USE flyway_demo_db; $SHOW TABLES; „Java-Projekt von A bis Z“: SpringBoot + Flyway – 19Wie erwartet fand eine Migration statt, bei der die Ländertabelle erstellt wurde und die Tabelle flyway_schema_history erschien, in der Informationen zu Migrationen gespeichert sind. Gehen wir weiter und sehen, welche Datensätze es gibt (und ob es überhaupt welche gibt). $SELECT * FROM flyway_schema_history; „Java-Projekt von A bis Z“: SpringBoot + Flyway – 20Hier ist die Aufnahme, die einzige. Es enthält viele interessante Daten. Version, Beschreibung der Migration, welche Art von SQL (und möglicherweise auch XML), der Name des Skripts selbst, Prüfsumme ( das ist so etwas wie ein Hashcode, der verwendet wird, um zu überprüfen, ob sich die Migration geändert hat oder nicht. Dies wird durchgeführt für den Fall, dass wir eine Migration in der Datenbank durchgeführt haben und diese dann korrigiert wurde: Dies ist nicht möglich, alle Änderungen werden nur durch eine neue Migration vorgenommen und um dies zu verhindern, überwacht der Prüfbetrag dies), Benutzer-SQL-Name, Migrationsverarbeitung Datum, Ausführungszeit und Ergebnis (erfolgreich oder erfolglos). Eine einmal geschriebene Migration sollte in Zukunft nicht mehr geändert werden. Auch wenn ein Defekt vorliegt. Alle Änderungen erfolgen erst durch eine erneute Migration. Es ist sehr wichtig. Um zu zeigen, was passieren wird, ändern wir unser Skript ein wenig und versuchen, es erneut auszuführen. Fügen wir in unserer Migration einen Eintrag zur Ländertabelle hinzu „Java-Projekt von A bis Z“: SpringBoot + Flyway – 21und führen die Hauptmethode aus. Das erhalten wir: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 22Wie erwartet hat Flyway erkannt, dass das Skript geändert wurde, und hat die Migration nicht durchgeführt. In einigen Fällen kann es tatsächlich erforderlich sein, eine aktualisierte Migration auszuführen. Damit Flyway dies überspringt, müssen Sie den Eintrag in der Tabelle „flyway_schema_history“ löschen und dann die aktualisierte Migration ausführen. Dies ist kein normales Verhalten und sollte auch nicht so sein, aber Sie müssen auch über diese Methode zur Lösung des Problems Bescheid wissen. Wir haben uns mit der ersten Migration befasst. Jetzt möchte ich eine weitere Migration mit Daten zu Ländern hinzufügen, wie im Artikel über die Datenbank: Datei V00002__Add_test_data_to_country.sql„Java-Projekt von A bis Z“: SpringBoot + Flyway – 23 Und lassen Sie uns die Hauptmethode erneut ausführen: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 24Aus den Protokollen geht hervor, dass die Datenbank vor Beginn der Migration vorhanden war in Version 00001, also alle Migrationen nach dieser Version. Als nächstes wurde Version 00002 gestartet und war erfolgreich. Schauen wir mal nach, oder glauben Sie mir schon, dass sich bereits drei Datensätze im Land in der Datenbank befinden?)) Ich würde das prüfen, also Beweis: „Java-Projekt von A bis Z“: SpringBoot + Flyway – 25Etwas in der Art. Wenn Sie das Projekt erneut ausführen, überspringt Flyway einfach die Einführung von Migrationen, da die Datenbank vollständig der erforderlichen Version entspricht.

Abschluss

Dieses Mal haben wir gelernt, wie man ein Datenbankmigrationstool in Verbindung mit SpringBoot versteht und verwendet. Diese Informationen sind erforderlich, um zu verstehen, was ein Datenbank-Versionskontrolltool ist, am Beispiel von Flyway. Freunde, der Quellcode des Projekts, den ich gezeigt habe, ist in unserer Organisation auf Github veröffentlicht . Wenn Ihnen das Beispiel gefällt, geben Sie ihm einen Stern , und ich werde verstehen, dass meine Arbeit nützlich und wirklich eine Fortsetzung wert ist. Normalerweise empfehle ich, mein Github-Konto zu abonnieren . Durch ihn führe ich meine gesamte Arbeit an Open Source und alle Demoprojekte durch, die meine Artikel stets begleiten. Vielen Dank an alle fürs Lesen. Das nächste Mal werden wir unsere Bewerbung schreiben. In Zukunft wird es einige notwendige Theorien zu Docker geben, aber wir werden sie durch die Praxis stark verwässern.

Nützliche Links

Heutzutage gibt es nicht viele nützliche Links. Schauen Sie sich Evgeniys Video an, es lohnt sich wirklich!
  1. Website zum Erstellen von Projekten zum Thema Frühling
  2. Evgeniy Borisov – Frühlingsbauer
  3. Dokumentation im Frühjahr für Flyway

Eine Liste aller Materialien der Serie finden Sie am Anfang dieses Artikels.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION