Der Spring Cloud Netflix Stack Grundkurs

Eine Spring-Boot-Anwendung kennenlernen und weiterentwickeln

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Um nicht das Rad neu erfinden zu müssen, verwenden Sie eine bestehende Spring-Boot-Gästebuch-Applikation, auf deren Basis Sie die weiteren Entwicklungsschritte durchführen. Die Anwendung ist in Form von Microservices ausgeführt worden und kann sowohl über Eclipse als auch über Docker gestartet werden.

Transkript

Wenn wir mit Hilfe von Spring Cloud Netflix Framework Applikationen erstellen wollen, dann benötigen wir natürlich etwas, worin wir das Spring Cloud Netflix Framework integrieren können. Es macht es an dieser Stelle relativ wenig Sinn, eine neue Applikation von Hand zu schreiben, deswegen verwenden wir eine fertige, kleine Gästebuchapplikation, die bereits auf dem Spring Boot Stack aufsetzt und in Form von Microservices ausgeführt ist. Es gibt hier ein Frontend- und ein Backendservice. Die Applikation verfügen schon über die Möglichkeit, dass wir neue Einträge hinzufügen können. Dabei werden jetzt hier an dieser Stelle keine sonderlichen Sicherheitsmechanismen implementiert oder Ähnliches. Es wird einfach nur ein Eintrag angelegt und der kann dann wieder abgerufen werden. Werfen wir einen Blick darauf, wie die Applikation bisher im Code implementiert ist. Die Applikation, die wir eben gesehen haben, ist, wie bereits erwähnt, in Form von Microservices umgesetzt und sie besteht aus zwei Microservices. Zum einen der Frontend-Microservice und zum anderen der Backend-Microservice. Beide Microservices sind als Spring Boot-Applikationen umgesetzt, das kann man in der Datei "pom.xml" ganz gut nachvollziehen, denn hier ist als Parent, also übergeordnetes Projekt, die "artifactId" "springboot-starter-parent" angegeben und damit haben wir es hier mit einem waschechten Spring Boot-Projekt zu tun. Ein Spring Boot-Projekt benötigt stets eine Bootstrapping-Klasse. Das ist in diesem Fall die Klasse "GuestbookFrontendApplication". Das ist die einzige Java-Klasse in diesem Frontend-Projekt und deren Aufgabe besteht eigentlich nur darin, die Spring Boot-Applikation als solche zu starten und dabei wird dann der Webserver gestartet, die Applikation wird darin deployed und das Ganze wird dann auf Port 8080 bereitgestellt. Stopp, das wird es hier nicht, denn es gibt hier eine Datei, "Application.properties" und dort ist der Port dieser Applikation auf den Port 8081 festgelegt. Das ist auch die Adresse gewesen, die ich im Browser oben eingegeben hatte. Die Applikation als solche besteht dann aus zwei HTML- und zwei JavaScript-Dateien, die sind einigermaßen passend benannt. Die "index.html"-Datei stellt die Startseite dar und diese lädt dann die "index.js"-Datei nach und Analoges geschieht bei der "add.html"-Datei. Wenn wir uns die "index.html"-Datei einmal anschauen, dann erkennen wir, dass Sie mit Hilfe des Twitter Bootstrap Frameworks und jQuery umgesetzt worden ist. Für das benutze ich dann die entsprechenden WebJars-Komponenten. Auch diese sind hinterlegt in der "pom.xml"-Datei und der Aufbau der "index.html"-Datei ist relativ einfach. Im Grunde gibt es hier drin eine Tabelle, da drin befindet sich ein Element mit der ID "Content" und dort werden dann die Gästebucheinträge reingerendert. Damit diese Gästebucheinträge gerendert werden können, müssen sie natürlich geladen werden und das geschieht in der Datei "index.js". Diese macht beim Aufruf ein Request auf das Backend. Das Backend liegt auf "localhost:8080", lauscht auf den virtuellen Pfad "guestbook" und wenn ich das Ganze per HTTP-GET-Methode aufrufe dann werden die hinterlegten Gästebucheinträge geladen und dann hier jeweils in einer einzelnen Tabellenzeile angezeigt und diese Tabellenzeile stellt dann die Überschrift, den eigentlichen Inhalt, das Datum und den Kommentator untereinander dar. Möchte ich einen neuen Eintrag hinzufügen, dann wird die Datei "add.html" aufgerufen. Auch diese Datei wird mit Hilfe von Twitter Bootstrap dargestellt und ihre Aufgabe besteht darin, ein Eingabeformular zu rendern. Dieses Eingabeformular verfügt über die drei Felder: Titel, Beitrag und Name. Unterhalb dieser Felder gibt es zwei Schaltflächen, die eine bricht ab und die andere führt das eigentliche Speichern aus. Dieses Speichern findet mit Hilfe des in der Datei "add.js" hinterlegten JavaScript-Codes statt. Dabei werden die Daten ohne weitere Prüfung, wie bereits erwähnt, in ein Datenobjekt überführt und das Ganze dann mit Hilfe eines Put-Requests an das Backend geschickt, das ist dieselbe Adresse wie bei "get", nur die HTTP-Methode ist eine andere und wenn das Ganze erfolgreich war, dann wird eine Erfolgsmeldung angezeigt. Ist das Ganze nicht erfolgreich gewesen, dann wird eine entsprechende Fehlermeldung angezeigt. Damit können wir uns dem Backend zuwenden. Auch das Backend ist eine Spring Boot-Applikation, allerdings gibt es in diesem Backend keine HTML- oder JavaScript-Dateien, sondern nur Java-Dateien. Die erste Datei, die wir uns anschauen, ist die Bootstrap-Datei "GuestbookBackendApplication", hier wird die Applikation gestartet. Weitere Logik ist hier nicht enthalten. Die eigentliche Logik für die Verarbeitung der Daten, befindet sich in der Datei "GuestbookController". Bei dieser Datei handelt es sich um eine normale Java-Klasse, die mit der Controller-Annotation versehen ist und die auf den virtuellen Pfad "/guestbook" innerhalb der Applikation hört. Sie verfügt über zwei Methoden, "getEntries" und "create", beide lauschen sie auf den virtuellen Pfad "/" unterhalb von "/guestbook". Der Unterschied zwischen diesen Methoden ist die erwartete HTTP-Request-Methode "GET" bei "GetEntries" und "PUT" bei "create". Die Methode "getEntries" macht nichts anderes, als aus dem Repository, in dem die Daten gespeichert sind, alle Einträge auszulesen und sie zurückzugeben, während die Methode "create" in diesem Repository einen neuen Eintrag anlegt und diesen dann auch wieder zurückgibt, um der aufrufenden Komponente zu signalisieren, dass die Daten erfolgreich gespeichert worden sind. Die eigentlichen Daten, die zu speichern sind, werden in Form des "GuestbookEntry" abgelegt. Das ist eine ganz normale Java-Klasse, die als Entität annotiert ist, deswegen kann sie mit Hilfe der JPA auch entsprechend verwaltet werden. Die Felder, die wir im HTML-Formular gesehen haben, Titel, Kommentar und Name des Kommentierenden, sind hier abgebildet als Felder "title", "comment" und "commenter". Zusätzlich gibt es ein Feld "date" und ein weiteres Feld "id". "id" ist ein automatisch generierter Wert, der dient als Primärschlüssel und "date" ist ebenfalls beim Speichern mit dem aktuellen Datum vorbelegt und bei der Rückgabe wird das Ganze in ein leserliches deutsches Format überführt, damit nicht einfach nur eine Zahl oder ein englisches Datum zurückgegeben wird. Mehr gibt es an dieser Klasse schlichtweg nicht zu sehen, weil zu diesen Feldern gibt es dann noch die "Getter" und die "Setter" und deswegen widmen wir uns der letzten interessanten Klasse in diesem Projekt und das ist das "GuestbookRepository". Dieses "GuestbookRepository" ist eigentlich gar keine Klasse, sondern nur ein Interface. Dieses Interface erweitert das Basis-Interface "JpaRepository" und "JpaRepository" ist hinterlegt im Spring Data JPA-Projekt und erlaubt es uns, automatisch für den angegebenen Datentyp und den Typ seines Primärschlüssels CRUD-Operationen bereitzustellen. CRUD-Operationen sind Create, Read, Update, Delete-Operationen, also die Standard-Operationen, die man auf der Datenbank ausführt und wir haben hier zusätzlich eine weitere Operation definiert, nämlich "findAllByOrderByIdDesc". Diese Methode wird von Guestbook-Controller aufgerufen und die Magie von Spring Data JPA besteht darin, dass allein durch das Hinzufügen der Methode "findAllByOrderByIdDesc" wir über die entsprechende Logik und Implementierung verfügen, bei der alle "GuestbookEntry"-Instanzen, die sich in der Datenbank finden lassen, zurückgegeben werden und dabei automatisch in absteigender Reihenfolge anhand ihres "id"-Wertes sortiert werden, sodass der Datensatz mit der höchsten "id", letztlich der neuste Datensatz, als erster kommt und der Datensatz mit der niedrigsten "id" der älteste Datensatz, als letzter zurückgegeben wird. Damit ist alles gezeigt, was sich in diesen Applikationen an Java, HTML und JavaScript-Code finden lässt; allerdings sei noch auf eine Datei hingewiesen nämlich die Datei "Dockerfile" die sich in "src/main/docker" sowohl im Backend- wie auch im Frontend-Projekt befindet und diese Datei ist dafür verantwortlich, dass die Applikation über Docker lauffähig ist. Das Ganze basiert auf dem Image mit dem Namen "Java" in Version 8 und es wird die Applikation, das JAR-Archiv der Applikation, als "app.jar" diesem Image beim Builden hinzugefügt und automatisch gestartet. Eine analoge Datei gibt es im Frontend. Gleicher Pfad "src/main/docker" und dann die Datei "Dockerfile". Der einzige Unterschied ist hier, das der Dateiname, der als Basis dient, natürlich ein anderer ist, nämlich nicht die "backend.jar"-Datei, sondern die "frontend.jar"-Datei. Damit können Sie diese Applikation über Docker starten. Alternativ, und so habe ich es auch getan, per Rechtsklick auf das Projekt und dann Auswahl von "Run as" "Spring Boot App" im Eclipse. Sollten Sie diese Option "Run as" "Spring Boot App" nicht haben dann haben Sie höchstwahrscheinlich diese empfehlenswerte Spring Tool Suite nicht installiert. Das können nachholen, indem Sie über "Help" "Eclipse Marketplace" gehen und hier einmal nach "STS", der Spring Tool Suite, suchen und dann die aktuellste Version installieren. Eclipse wird dann neu starten. Nach ein paar Minuten und einem leckeren Kaffee, ist das Ganze aber sicherlich erledigt. Damit haben wir diese Applikation nun in ihrer Gänze betrachtet. Ich möchte ganz explizit auf den größten Nachteil dieser Applikation hinweisen und das ist das hier. Nämlich die feste Verdrahtung der Adresse des Backends, nicht nur des virtuellen Pfades, das wäre in Ordnung, sondern auch des Servers. Wir haben hier fest verdrahtet die Angabe, dass sich die Applikation unter "http://localhost" auf Port 8080 befindet, also das Backend, und das ist natürlich alles andere als anpassbar oder für die Cloud geeignet. Das wäre ein Punkt, den man dringend ändern sollte. In diesem Video haben wir uns die Applikation angeschaut, die wir als Grundlage für den Einbau von Spring Cloud Netflix-Komponenten nutzen wollen. Wir haben herausgefunden, dass die Applikation als solches schon eine ganze Menge an Funktionalitäten bereitstellt; dass sie auch über Docker ausführbar ist; dass sie, wenn die Spring Tool Suite installiert ist, auch über Eclipse laufen kann und dass sie den einen oder anderen Fallstrick, der nicht so offensichtlich ist, der aber sehr gravierend wirken kann, schon beinhaltet und damit eine sehr reizvolle Basis für eine Weiterentwicklung in Bezug auf echte Cloud-Fähigkeit darstellt.

Der Spring Cloud Netflix Stack Grundkurs

Lernen Sie den Open Source Cloud Stack und seine vielfältigen Einsatzmöglichkeiten kennen.

2 Std. 5 min (13 Videos)
Derzeit sind keine Feedbacks vorhanden...
Exklusiv für Abo-Kunden
Erscheinungsdatum:06.03.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!