Transkripte
1. Einführung: Hallo zusammen. Willkommen
zu diesem Kurs. Mein Name ist Ezekiel Eramos. Ich werde dein Lehrer
für diesen Kurs sein. Dieser Kurs ist projektbezogen, und wir werden
einen pragmatischen Ansatz verfolgen Dinge im Detail
untersuchen Ich bin mir sicher, dass Sie
den Kurs sowohl
interessant als auch sehr ansprechend
mit vielen Inhalten finden sowohl
interessant als auch sehr ansprechend
mit vielen Inhalten Ich hoffe, wir sehen uns
im nächsten Video.
2. Erforderliche Tools: Ein B, Z hier. In diesem speziellen Video werden
wir
die Tools und
Technologien besprechen, die für diesen Kurs erforderlich sind. Das allererste ist,
Spring
- oder Spring Boots mit Hebelwirkung
auf Java 8 und höher schreiben zu können - oder Spring Boots mit Hebelwirkung
auf Java 8 und höher Bitte beachten Sie, dass Sie mit diesem Kurs keinerlei Probleme
haben sollten, wenn Sie mit Java,
mindestens Java 8,
vertraut haben sollten, wenn Sie mit Java,
mindestens Java 8, sind Das ist die erste Anforderung. Kommen wir nun zu
der IDE, die wir verwenden werden
, der integrierten
Entwicklungsumgebung Wir werden Intelligda verwenden Intellig Ida ist das, was
wir in diesem Kurs
verwenden werden , oder Ich werde die
ultimative Version verwenden, aber ich würde
nichts tun, was über
die Community-Version hinausgeht die Community-Version , die völlig kostenlos
ist Alles klar? Bitte
denken Sie bitte daran. Wir werden auch Github
nutzen
, eine kostenlose Online-Plattform
zum Speichern unserer Projekte Bitte beachten Sie also, dass dies auch sehr wichtig
ist. Dann werden wir unsere API zur
Verwendung von Hussman Hosman
testen Verwendung von Hussman Hosman Wenn Sie
mit Insomnia vertraut sind
oder mit der Verwendung von Curl
vertraut sind Das ist auch willkommen. Benutze einfach was für dich bequem ist. Und schließlich für die Erstellung
eines übersichtlichen Abschnitts. Das ist
die Klasse, die nach
dem Pipeline-Abschnitt kommen
wird und Docker
Desktop verwenden wird Docker Desktop ist absolut kostenlos. Wo Sie
je nach verwendetem
Perting-System herunterladen können Das ist praktisch alles in diesem Kurs erwarten werden. Wenn das geklärt ist, sehen wir uns im nächsten Video
3. Monolith vs. Microservices: Ordnung, vielen Dank, Leute, dass ihr zu mir gekommen seid Mein Name ist Zikel, wie ich es im letzten Video
vorgestellt habe,
Tod Coals. Ich habe mich
als Zikel oder Zi
vorgestellt als Zikel oder Zi Dieser Teil dieses Abschnitts ist also
ein bisschen von Jeri, oder? Wir, es wird wahrscheinlich ein
paar Minuten dauern. Wenn Sie jedoch wissen, dass
Sie nicht an
Jery interessiert sind, ich weiß genau,
worum es bei den Kosten geht, könnten
Sie praktisch einfach mit dem nächsten Abschnitt
fortfahren Überspringe einfach dieses Video, oder?
Überspringen Sie dieses Video schnell ,
um sich tatsächlich zu langweilen.
In Ordnung, lass uns weitermachen Also das ist nur ein sehr
kleiner Vergleich zwischen Monolith und
Microservices Denken Sie daran, dass das Kerndetail
dieses Kurses Modulith ist. Also müssen wir den Übergang sehen
. Es sollte einen Grund dafür
geben, dass es ein Problem oder
einen Anwendungsfall
geben sollte ein Problem oder
einen Anwendungsfall
geben , den das Modulit
im Grunde löst Und deshalb
müssen wir wissen, welche gemeinsamen Probleme wir zwischen
Monolith und
Microservices haben und warum
wir uns für Modulit
entschieden haben oder warum wir entschieden haben oder warum wir In Ordnung. Äh, ausgehend von der ersten Architekturübersicht Wir sehen, dass Monolithen
grundsätzlich eng miteinander verbunden sind, Monolithen Microservices sind zwar
kleine unabhängige Dienste die Das könnte einfach so erklärt
werden, dass alles in
derselben Anwendung
befindet einem Monol
alles in
derselben Anwendung
befindet, sodass es sehr groß werden
kann.
Wir haben tatsächlich Dinge, die
eng miteinander verknüpft Aber im Fall von Microservices könnten
wir die Dinge tatsächlich
aufteilen. Ein typisches Beispiel könnte sein, wenn wir
in einer Organisation einen E-Mail-Dienst
haben, wir könnten, anstatt alles
in
einer einzigen Anwendung zusammenzufassen, diesen Dienst auslagern Jeder oder jede
andere Anwendung wird einfach den
E-Mail-Dienst anrufen und
ihre Anfrage einreichen , und der
E-Mail-Dienst sollte sich nur um die Bearbeitung
dieser Anfragen kümmern Für Module wird sich jedoch
alles
weiterhin in derselben
Modult-Anwendung Sie sollten wahrscheinlich
einfach ein Paket haben wenn Sie tatsächlich über Java
sprechen, oder einfach ein Paket haben, das sich nur um das Versenden von
E-Mails kümmert und das ist alles Sie haben einfach einen Dienst, einen
einzigen Dienst , den im Grunde jeder anruft Lassen Sie uns über den nächsten
Punkt sprechen, der Skalierbarkeit ist. Äh, das ist ein sehr zentrales
Problem bei Monolithen, oder? Denn wenn Sie skalieren wollen wenn Sie skalieren wollen, bedeutet
Skalierung zum Beispiel, dass Sie
verschieben möchten, Sie möchten
mehrere Instanzen
eines Monolithen erstellen mehrere Instanzen
eines Monolithen Ich habe tatsächlich
in einer Organisation
gearbeitet, in sie einen Monolithen über
mehrere Instanzen hinweg
duplizieren mussten einen Monolithen über
mehrere Instanzen hinweg
duplizieren Ja, das ist tatsächlich dauerhaft. Aber das Problem oder der
Nachteil dabei ist, dass Sie
entdecken, nehmen Sie zum Beispiel
den Teil, den wir bereits erwähnt haben,
den E-Mail-Dienst. Wenn wir einen einzigen
Dienst geschrieben haben und dieser Dienst
normalerweise verfügbar ist oder problemlos Tausende von Anfragen annehmen
kann, da Sie
an einen SMTP-Server senden im Grunde
alles erledigt Wenn Sie nun tatsächlich Monolithen
skalieren, erstellen
wir am Ende mehrere Instanzen der
E-Mail-Anwendung , was möglicherweise nicht Nehmen wir zum Beispiel,
oder sollte ich sagen, im Vergleich dazu, nur
einen einzigen E-Mail-Dienst einzurichten
, an den jeder eine
Anfrage Das könnte ein
typischer Anwendungsfall sein. Wir könnten uns auch einen anderen Teil
ansehen in dem wir sehen, dass die
Daten zwischen
den Daten, den Daten für oder sollte ich sagen das D-Modell nicht wirklich viel
verarbeiten. Aber im Fall eines
Monolithen wird er wachsen. Es wird wachsen, denn sollte ich
sagen, es wird sich duplizieren. Das ist das Wort. Es
wird dupliziert werden Warum für Microservice, könnten
Sie einfach herausfinden, oder? Erstellen Sie einfach eine einzige Instanz
dieses speziellen Modells, und wir können uns um die Dinge
kümmern, anstatt einfach alles immer
wieder für In Ordnung zu
versenden. Lassen Sie uns über Entwicklung sprechen
und lassen Sie uns über
Entwicklung und
Bereitstellung sprechen , richtig? In Ordnung. Truth Monity ist sehr einfach
zu implementieren, weil es
nur eine Sache gibt , die sein
könnte, wenn Sie es immer wieder zum Laufen
bringen, dasselbe
passiert einfach, oder? jedoch
mehrere Codebasen gibt,
kann es bei Mikrodiensten Da es jedoch
mehrere Codebasen gibt,
kann es bei Mikrodiensten mehrere Repositorys
oder mehrere Git-Repositorys oder mehrere Git-Repositorys Sie müssen für jeden einzelnen von ihnen eine
Pipeline erstellen für jeden einzelnen von ihnen eine
Pipeline Und das erhöht nur die
Komplexität im Vergleich zu
nur
einem Monat, in dem Sie nur eine
einzige Codebasis bereitstellen
würden, und das löst einfach das Problem, dass alles bereitgestellt
wird In Ordnung, lassen Sie uns mit
dem nächsten Abschnitt fortfahren. Mike, lass uns über Modeerscheinungen wie
Isolation und Resilienz sprechen. Der Nachteil von Monolith ist
, dass, wenn eine Komponente ausfällt,
alles versagt. Eine Komponente versagt, alles
versagt Aber bei Microservices könnten
Sie feststellen,
okay, wenn es sich um einen
Abschnitt handelt, der ausfällt, muss
dieser Teil nicht ausfallen dieser Teil nicht Ein gutes Beispiel, ein
gutes Beispiel könnte sein wenn Sie einen SMTP-Server haben Ich benutze das nur, weil
wir damit angefangen haben. Wir haben einen SMTP-Server, wenn Sie sich mit
ihm verbinden und er
keine Verbindungen akzeptiert, oder? Sie versuchen, eine Verbindung herzustellen,
aber bei einigen wird keine Verbindung hergestellt , es wird ein seltsamer Fehler angezeigt Dieser Pfeil,
dieser seltsame Fehler, wenn Sie im
Fall eines Mikrodienstes isoliert haben, haben
Sie einen
E-Mail-Dienst, der nur
eigenständig ist, was würde in diesen Fällen
passieren Nur der SMTP- oder nur der E-Mail-Dienst
hätte ein Problem Der E-Mail-Dienst
hätte ein Problem. Was würde ich in diesem Fall tun? Wahrscheinlich würde
ich einen Messaging-Dienst
haben, bei dem eine Nachrichtenwarteschlange, ich meine, eine Nachrichtenwarteschlange in der tatsächlich
alle Nachrichten
oder alle Anfragen eingehen, und der
E-Mail-Dienst kann jederzeit versuchen, zu überprüfen, ob die Nachricht verarbeitet
wurde Selbst wenn sie auftauchen, können
Sie es immer noch einmal versuchen, all diese E-Mails zu versenden und alles zu veröffentlichen Aber im Fall von Monolf, wenn dieser
E-Mail-Dienst tatsächlich ausfällt, sehen
Sie einfach, dass die gesamte
Anwendung ausgefallen ist Alles kommt einfach runter. Lassen Sie uns Ihre Chance nutzen
, es zu starten. Es
sinkt einfach weiter, weil E-Mail-Dienst nicht funktioniert Solange Sie es nicht zum Laufen bringen, können
Sie Ihre
Anwendung also nicht bereitstellen, oder? Oder Sie bekommen
seltsame Fehler, die sich auf
andere Komponenten
der Anwendung auswirken . In Ordnung,
Technologie-Stack, richtig? Stack bedeutet einfach, bedeutet einfach
verschiedene Pogammi-Sprachen. Im Fall von Monolith
nur ein einziger Stapel. Nun, es könnte eine Dummheit sein und es könnte eine
nicht so große Dummheit sein Im Fall eines Monats
, weil Sie versuchen werden, alles, was Sie
tun müssen ,
mit nur einem einzigen Stapel zu erledigen In diesem Fall Springbot Java. Nehmen wir an, dass einige andere
Pgammi-Sprachen in
einem bestimmten Bereich besser gedeihen als Springbot-Java,
das heißt, Microservices würden es
tatsächlich versuchen, weil man würde Sie isolieren einfach dieses Modul oder isolieren einfach
diesen Teil des Dienstes
und erstellen ihn als
separaten Dienst und verwenden diese spezielle
Sprache, um ihn einfach zu Wie dem auch sei, das
heißt nicht Spring Woods. Ich glaube, ich finde immer noch meine
jahrelange Entwicklung. Feder- und Quellholz
transportieren wir für
nahezu alle Anwendungsfälle. Ich dachte nur, ich
sollte das erwähnen. Kommunikation und Integration. Ich glaube, wir haben vorhin
darüber gesprochen. Ich dachte nur, Baba hätte das gerade noch einmal
erwähnt. Wir sehen, dass Mikrodienste
über APIs kommunizieren. Sie kommunizieren immer über APIs. Sie könnten einige
wahrscheinlich über SOP tun, andere über Rest oder eine andere Form
von Protokoll oder sollte ich sagen ein Format, das sie tatsächlich festlegen ,
aber im Fall von Monolith funktioniert
es einfach Wir nennen es dafür einfach
Funktion, nennen es
einfach Service
Wire im Server-Service Meistens wird es angezeigt, wenn es
nicht richtig entworfen wurde. Es führt zu Spaghetti-Code, führt zu etwas
in dieser Art. Aber nicht unbedingt. Ich habe ein
richtig entworfenes Monolithsystem gesehen , bei dem
alles richtig angeordnet war Aber du siehst nur, dass es
diese Art von Kupplung gibt, oder? Aber Microservices,
man muss nur API oder die Cord-API
aufrufen, ich könnte Probleme lösen, Ausnahmen
behandeln, und ich denke, das ist im Grunde
der Unterschied Lass uns weitermachen, Leute. Ja. Das ist der letzte Teil, über den
wir sprechen werden. Es gibt noch einige
andere Unterschiede, aber ich möchte nur diesen ansprechen. Lassen Sie uns abschließend über
Komplexität und Wartung sprechen. Monolithen werden standardmäßig
sehr schwierig, oder? Ich habe in der
Codebranche gearbeitet, wo es Tausende
gab . Ich habe Tausende von
Codezeilen
gelesen , die sich über
verschiedene Dateien erstrecken, und
es ist in gewisser Weise höllisch, sie zu verwalten Es ist wirklich, sehr mühsam, es tatsächlich
zu verwalten. Ich habe jedoch auch
an einem System gearbeitet, bei dem Sie einen bestimmten Dienst
haben, Sache und nur eine
Sache
erledigt, oder Sie könnten einen haben, der einfach die ganze Arbeit
ist. Im Grunde genommen ist alles, was es tut in diesem Fall, aus
meinem vorherigen Beispiel, einfach E-Mails zu senden, oder? Du musst
nichts tun. Ich habe auch einen Service
gesehen, der gebaut wurde. Alles, was es tut, ist nur Transaktionen zu
verarbeiten. Es hat keine Schnittstelle
zum Kunden. Ich bearbeite nur Transaktionen. Wir haben also einen anderen
Dienst, der tatsächlich mit den Kunden spricht, die Anfrage entgegengenommen hat,
dann die Anfrage
empfangen und über
eine Nachrichtenwarteschlange an
den anderen Dienst weitergeleitet eine Nachrichtenwarteschlange an wird, sie
abhört und
verarbeitet. Wenn also ein Problem auftritt, versuchen
wir herauszufinden, woher der
Standard kommt,
ob
es sich um den ersten Dienst
oder den zweiten Dienst handelt, dann versuchen wir einfach, die Dinge zu
korrigieren Es gibt einen Teil, in dem Sie tatsächlich über
APIs sprechen und sehen
können , wie die Dinge sind, aber monolith, es wird sehr, sehr, sehr
mühsam Und es wird mühsamer wenn man Wenn Sie Teams haben,
die sich ändern und jetzt viele Modelle
oder viele
Teile des Codes verwalten
müssen ,
wird die Verwaltung sehr mühsam, oder
? Das bringt uns zu
Spring Modulit. Diese Definition, die Sie
hier sehen, war praktisch eine
Abklatsch aus dem Dokumentarfilm,
der offiziellen Dokumentation Ich habe
nur ein kleines Klopfen belohnt aber es ist einfach so, oder? Spring Modult ist also eigensinnig,
es ist ein opinatedToolkit, das domänengesteuerte modulare Anwendungen
bevorzugt, zusammen bevorzugt mit Spring Goods. Das ist der Kern. Das ist der Kern dessen
, was es zu lösen versucht. Es gibt ein Muster, dem
Sie folgen müssen. In diesem Fall werde ich
direkter sagen, dass
Sie die Dinge unterteilen müssen. Sie müssen sicherstellen, dass
Sie die Dinge
richtig in Modelle unterteilen. Beispiel oben: Sie hätten einen
E-Mail-Dienst in einem bestimmten Modell oder Paket Pakete werden also als
Modell im Frühjahrsmodell bezeichnet. Sie haben es also in einem separaten
Paket oder Modell. Der Service, der
Ihre Transaktion bearbeitet, richtig? Oder nehmen wir an, Sie haben
einen Zahlungsdienst
, dieser Zahlungsdienst
wäre Teil eines Modells. Wenn Sie einen Oder-Dienst haben
, wird dieser Teil eines Modells sein. Wenn Sie sozusagen ein Inventar, einen
Inventarservice haben, dann haben Sie das in
einem Modell, oder? Die Entitäten, der Service, alles wird
mit dem Modell verknüpft sein. Nun, was
hofft man damit zu erreichen? Das Hauptziel ist es, dass Sie als Monolith aufbauen oder anfangen
können Falls erforderlich, entscheiden Sie, dass
Dinge versendet werden müssen. Ein bestimmtes Modul
wird zu groß und muss
an einen anderen Dienst versendet werden. Sie können einfach den
gesamten Modus so kopieren, wie er ist, und ihn in einer neuen
Spring Booth-Anwendung, einem neuen Dienst oder einer neuen
Anwendung ablegen und Dinge, die wir nur wenig
oder gar nicht konfigurieren Alles ist auf
dem neuesten Stand, oder? Alles ist auf dem neuesten Stand.
Das ist das Schöne, oder? Du musst den
Code nicht ändern, denn was da ist, alles ist in gewisser Weise
schon in sich abgeschlossen, oder? Die Art der Kommunikation, man ruft keine Funktionen auf. Man ruft nicht hier und
da
alle Dienste an, man kommuniziert
über Ereignisse. Wir versuchen
über Ereignisse zu kommunizieren. Wie verbessert das also die Dinge? Sobald Sie diese Anwendung verschoben haben, sobald Sie das Modul
in eine separate Anwendung verschoben haben, können Sie es einfach in API
ändern, anstatt über ein
Ereignis
zu kommunizieren anstatt über ein
Ereignis
zu kommunizieren, sobald es verschoben wird. Sie können die API einfach verfügbar machen und der bestehende Dienst kann einfach die API
aufrufen und Dinge einbinden. Das Spring-Modul
ist eine sehr gute
Möglichkeit , die Dinge auch
in dieser Hinsicht zu betrachten. Ich möchte dieses
Bild im Kopf haben. Wir haben Pakete, alles ist klar
in Pakete aufgeteilt. Auf traditionelle Weise würden sich einige von uns die Anwendung tatsächlich
ansehen. Sie werden eine
Entität haben, Sie haben eine Post, Sie haben ein Servicepaket, dann haben wir ein
Service-Implementierungspaket. Wir haben jetzt vielleicht ein
YouTube-Paket. Dieses Mal
hätten Sie in diesem Fall ein Ereignis gehabt, bei dem
es sich um ein Inventarpaket
handelt, dem es sich um ein Modell handelt. Alles ist
in sich geschlossen, sie haben eine
Position, dann
ist alles drin. Sie haben den
Zahlungsservice oder die Zahlung, alles ist in diesem Teil enthalten. Nehmen wir an, wir
haben auch ein Bestellmodul. Wenn für die Bestellung eine Zahlung erforderlich
ist, wird lediglich ein
Ereignis zur Zahlung gesendet. Dann gibt es einen Zuhörer
für die Zahlungen und ich einfach, erhalte
sie und bearbeite sie Ich denke genug von der Theorie,
schließ dich mir beim nächsten Code Begleite mich im Nest auf
der nächsten Folie oder einfach
im nächsten Video, sofern
du nicht gleich damit anfängst. Dies ist ein praktischer
praktischer Kostenfaktor. Danke Leute. Wir
sehen uns im nächsten Video.
4. Was wir bauen werden: Ordnung. Hey, Evon, hier. Das soll
ein relativ kurzes
Video sein , nur um
euch genau zu zeigen , was
wir bauen wollen, wie die Module schlecht strukturiert
sind und wie sie im Grunde miteinander kommunizieren
werden Wie Sie sehen können,
haben wir das E-Mail-Modell, den Ausnahmemodus,
ich meine, ich sage,
Sie sehen, dass alle Module im Grunde genommen mit
der Ausnahme sprechen, weil sie nur von einem
Modell, einem bestimmten Modell sprechen Und wir werden hier sehen, dass das andere Senden von Ereignissen zur
Zahlung und zur E-Mail führt. Im Grunde genommen hören sich die Bezahlung und die
E-Mail
gegenseitig ab, es wird einige Anwendungen geben, die hier
zuhören und hier
werden sie tatsächlich den
Event-Publisher haben. Okay. Und wir sehen, dass es auch
einen Modus gibt, der Event Action genannt wird. Das nennt man Inventar, das heißt, dieser Typ
wird sich darauf verlassen und es benutzen, aber
nicht davon abhängig, richtig. Und das hängt von der
Ausnahme ab. Das ist also ein Gesamtüberblick, und das beabsichtige ich auch. Wir haben also nur ein
vollständiges Bild vor Augen, also werde ich das
in der Ressource veröffentlichen, damit wir genau sehen können wie sich das entwickeln
soll, oder? Und wir könnten auch Zugriff
darauf auf das Git-Repository haben. Ordnung, danke Leute. Wir
sehen uns im nächsten Video
5. Bootstrapping-Abhängigkeiten: Ordnung. Hallo, Leute, wir werden die Abhängigkeit
untersuchen, die ihr für
diesen Kurs nutzen
solltet. In Ordnung. Ich benutze Spring
Intelligen, tut mir leid, ich benutze tatsächlich Spring Ich verwende tatsächlich Intelligen
Ultimate und ich kann die Abhängigkeit direkt
von der IDE aus
erhöhen Für diejenigen, die Spring Spring
verwenden, denke
ich jedoch, dass das STS ist. Ich denke, es ist SDS, ja STS, die verwenden
tatsächlich Eclipse Sie könnten tatsächlich kommen, um Ihren Frühling zu
beginnen. Ich wähle die Version aus,
die Sie wollen, und die Abhängigkeit ist, dass
ich sie von Intellij aus
teile und
sie dann tatsächlich einfüge
, oder? Intellij aus
teile und
sie dann tatsächlich einfüge
, oder Bitte beachten Sie, dass
ich Ihnen empfehlen würde, 3d30 zu verwenden und nicht drei bis
zwei bis sechs, oder? Wenn 3d30 und höher in Ordnung sind, verwenden
Sie bitte nicht
drei bis zwei bis sechs Und der Grund dafür ist, dass
es einen Aspekt der
Frühlingsmodule gibt , den wir besprechen
werden , nämlich die offenen
Module, richtig? Es ist noch nicht verfügbar. 32z ist bereits 3d30 verfügbar. Wählen Sie also alles von 3 bis 3 bis
Null und es sollte in Ordnung sein. Also empfehle ich dem Benutzer
Java 21, weil ich
grundsätzlich den
Spring Virtual Trade verwenden würde grundsätzlich den
Spring Virtual Trade verwenden Aber es ist nicht
wirklich dafür entschieden, weil wir uns für etwas Geringeres entscheiden können, oder? Aber das wollte ich
nur erwähnen. Wähle Gradle Maven,
was auch immer du entwickelst, was du gerne verwendest oder was du
bevorzugst, Und das wird einfach in Ordnung sein. Ordnung. Lassen Sie uns die
Abhängigkeiten untersuchen. In Ordnung. Ich werde diesen Aspekt
des neuen Projekts durchgehen. Ja, dann suche ich mir Spring
Booth aus. Ordnung. Frühlingsbude. Ja, ich würde diesen Frühling
anrufen. Ich nenne dieses Frühjahrsmodul Frühjahrs-Modulth-Kurs. Ich gehe Maven aussuchen. Ich benutze Maven. Dann benutze ich gerne
meinen Spitznamen Call Ms Cozi. Ich nenne es einfach die Gruppe, wähle
die Gruppe aus Ich lasse alles so wie es ist,
dann stelle ich mir etwa
21 als Präferenz Ich denke, das
sollte alles sein, damit ich mit der Auswahl von
Abhängigkeiten
weitermachen kann Auswahl von
Abhängigkeiten
weitermachen . Ich denke,
das ist in Ordnung. Ja. Also lass uns weitermachen. In Ordnung. Eine anfängliche Abhängigkeit
ist , wenn alles
geladen ist oder dazwischen, ich fange an zu erklären, was jede dieser
Abhängigkeiten bewirkt. Die erste Abhängigkeit, die
Sie wählen werden ist Web zu Web, wir
können tatsächlich testen, ob wir tatsächlich
ts vom Controller oder von Sorry vom
Controller aufrufen können. Im Grunde würde
ich in diesem Kurs auch den Hausarzt mit
GP auswählen, in diesem Kurs GP
verwenden. Dann bin ich auch ein großer
Fan von Umbok, ja. Als großer Teil von Umbo. Außerdem werden wir
Docker Compose verwenden. Davor, da
ich gerade JP ausgewählt habe, wählen Sie
einfach den Postgress-Treiber,
weil ich Postgress verwende Dann wähle ich
Docker Compose. Ordnung. Also lassen
wir das verkabeln, und das sollte ein guter Anfang
sein, damit wir tatsächlich weitermachen können. Sie können sehen, dass ich 330 nehme. Fangen wir an und
schauen wir uns genau an, wie uns das in der
Zukunft helfen
kann.
Dann erkläre ich, was
all die Abhängigkeiten bewirken. In Ordnung. Okay, ich werde das in
dieses spezielle Fenster laden. Okay, siehst du das demnächst? Ja, ja. Ja, es kommt bald. Lass uns eine Ladung hochspringen. Lassen Sie uns das schnell untersuchen damit wir
es tatsächlich beenden können.
Das ist ziemlich schnell. Stimmt. Das sind also im Grunde
die Abhängigkeiten. Nun, GPA GPA hilft tatsächlich dabei, GPA-Funktionen zu
nutzen. GPA-Funktionen sind Implementierungen und Implementierungen. Grundsätzlich weiß ich bei der IS-Implementierung
, die tatsächlich
einen Hybernt verwendet IS-Implementierung
, die tatsächlich
einen Hybernt verwendet, nicht, warum
mir mein Wortsystem fehlt Es ist Hybernt, was ein sehr gutes ORM
ist,
ein sehr gutes ORM , und Hibernt ist eine der Spezifikationen,
eine der
Implementierungen der GPA-Spezifikation eine Wenn Sie die aktuelle Prüfdokumentation und die
JPA-Spezifikation
überprüfen , denke ich, dass es im Grunde zwei
gibt. Ich denke, ein Hybernt ist tatsächlich weiter verbreitet
und ich würde sagen,
sollte ich sagen, dass er besser unterstützt wird, Alle Wir haben auch das Internet, das Ihnen
im Grunde hilft. Sie haben Dinge wie
die Controller, die Frühlingskontexte
und dergleichen. Das bringt
das tatsächlich in Docker Compose. Docker Compose ist eine
großartige Möglichkeit zum Testen. Für diejenigen unter Ihnen, die mit
Docker vertraut
sind , ist dies
kein Docker-Gericht, aber ich werde mein
Bestes tun, um hier
und da ein wenig über Docker
zeigen zu können hier
und da ein wenig über Docker
zeigen Das hilft dir dabei, OG Fin zu machen. Es hilft Ihnen dabei
, dass Sie nicht
definieren müssen, Sie müssen Ihre Eigenschaften nicht innerhalb Ihrer Anwendung
definieren,
die Eigenschaften oder die Anwendung Yamel. Ich würde nur Eigenschaften für Yam verwenden, aber ich würde von hier aus einige
Änderungen vornehmen Faktorisiere das schnell. Ich bin ein großer Fan von Yamel. Ich mag
die Immobilien nicht wirklich, oder? Das Board funktioniert also genauso. Bitte, es gibt
keine bessere Wahl, aber Board funktioniert tatsächlich. Sie müssen Ihr Eigentum also nicht
definieren. Wenn Sie es also beim Platzieren
im Docker Compose feststellen, wird es in dieser Anleitung verdrahtet Du bekommst automatisch
den Komponisten Yarmo. Also ein Composer Yarmo ist wo das heißt, wenn
du einen Docker hast, eine Docker-Instanz läuft und eine
Docker-Deca-Docker-Engine läuft, musst
du deine Eigenschaften nicht mehr hier reinschreiben Was der Frühling tun wird, ist, das zu überprüfen. Sobald es dies überprüft hat, stellt automatisch eine Verbindung
zu Ihnen Wir sehen diese Untätigkeit tatsächlich, wenn wir voranschreiten,
wir sehen sie in Dieser Teil dient nur dazu, die Abhängigkeit zu erklären und sehen, wie Abhängigkeiten
wir tatsächlich einführen Ja, dafür verwende ich Posgus. Sie können gerne
einen anderen Treiber verwenden oder sollte ich Ihnen diesen Nest-Treiber für
Datenbanken schicken Dann haben wir Pujet Umbo. Das hilft Ihnen,
viele Standardcodes zu reduzieren,
wie wir während des Gerichtsverfahrens gesehen haben.
Das ist im Grunde das, was wir
gerade haben Ist es das, womit wir beginnen
werden. Und nur um
dieses kurze Video abzuschließen, werde
ich kommunizieren
oder sollte ich sagen,
ich werde es auf GitHub pushen
, was mein Startup-Projekt ist. Ich habe dieses Setup bereits. Ich schiebe einfach drauf, um
aufzustehen oder reinzusteigen. Es kommt rein, du
musst es initialisieren. Ist er dann bei mir? Bei mir gibt es keine. Ich
liebe es, mit Fräulein zu meinem Kollegen hinzuzufügen. Lass uns
einfach eine neue Datei machen. Lesen Sie Met ND. Sie können einige Notizen hinzufügen , wenn es
für uns tatsächlich notwendig ist. Das haben wir. Dann dränge ich tatsächlich
auf Github, also du siehst, wie ich versuche, weiterzumachen, als ob wir versuchen würden,
zu Github zu wechseln. Wir haben ein Git-Git
hinzugefügt, um tatsächlich zu pushen, um nur Punkte zu bekommen. Der Punkt, was es tut, es wählt alles in dieser
Datei aus, das dann auch Gign auscheckt und ignoriert, was eigentlich nicht an die entfernte
Site gehen soll Was dann noch? Dann sollten wir uns verpflichten.
Nun, bevor ich mich festlege. Ich würde das nicht übertreiben
wollen, weil ich Gits Guardian bereits
in mein System integriert habe. Was macht
Git Guardian? Du kannst es einfach
nachschlagen, Git Guardian. Was Git Guardian
macht, ist, dass es
so aussieht wie
Benutzername/Passwörter,
und es verhindert, dass
du etwas übertreibst. Wenn du drückst, wird es
dich
tatsächlich direkt kennzeichnen und dir eine E-Mail schicken. Also werde ich versuchen das zu
entfernen, damit
ich nicht markiert werde Aber da du schon
weißt, was das macht, wissen wir
zumindest genau,
wie man es besser benutzt Also mache ich das einfach rückgängig. Ich werde das nicht
auf Locker Compose pushen. Dann habe ich mich dann verpflichtet. Das sind meine ersten Commits. Meine ersten Commits, also sind
es meine ersten Commits. Das ist mein erster
Commit. Dann werde ich den Zweig
wechseln
, weil Gits Hub tatsächlich empfiehlt, dass
Sie den
Zweig
eher auf Main als auf Master umstellen Zweig
eher auf Main als auf Master Du bevorzugst Main gegenüber
Master, mach diesen M. Dann schiebe ich das rein Dann
sind all diese Befehle auf Github verfügbar. Sobald du ein neues
Projekt starten willst und es öffentlich ist, siehst
du all diese Befehle, also mache ich nichts Neues,
es wird entfernt, dann füge
Origin hinzu und füge die URL ein. Ich habe etwas
Spezielles auf meinem System gemacht, also nur eine
Konfiguration, oder? Ich werde
das wahrscheinlich später untersuchen, aber ich glaube nicht, dass es
wirklich notwendig ist. Ich muss die URL nicht eingeben, ich habe bereits eine
Konfigurationsdatei. Jedes Mal, wenn ich so
etwas hinzufüge, nenne ich
so etwas wie
Projekte. Also das überprüft
die Basur einfach automatisch und leitet sie
einfach an diesen Also ja, ich mache das, also lass uns
Push, das ist Gin, dann Main überprüfen Push, das ist Gin, dann Main Das wird tatsächlich zu GitHub weitergeleitet. Ordnung.
Genau das habe ich als Coach gemacht, ich habe nichts Besonderes gemacht. Sobald du versuchst,
ein öffentliches Projektarchiv zu erstellen, siehst
du, dass all diese
Befehle da sind, du kannst es einfach indirekt verdrahten, du kannst es einfach indirekt verdrahten,
genau jetzt, wo ich gepusht ,
wenn ich das einfach neu starte sollten
wir alles hier
sehen können. Und alles kommt rein. In
Ordnung. Also haben wir es hier. Also gut, ich
weiß nicht, ich glaube, dieser Teil dieser Sitzung
dauert sehr lang. Es soll ein sehr
kurzes Video sein, nur um zu sehen, wie wir die
Abhängigkeiten einbauen Ordnung. Okay.
Danke, Leute. In Ordnung. Wir suchen tatsächlich
nach dem nächsten Video.
6. Spring Boot Docker Compose erkunden: Ordnung. Hallo, Leute.
Okay, in dieser Sitzung wird es also um Springboard
Docker Compose Springboard Docker Compose. Ich habe also,
anstatt die neueste Version zu verwenden, diese auf 16 oder zwei
ändern können Weil ich mir also durchaus bewusst bin, dass es immer ein Problem mit der
Backup-Kompatibilität
gibt, wenn die Leute von
Post einige
größere Änderungen vornehmen, es sei denn,
Sie nehmen die Leute von
Post einige
größere Änderungen vornehmen, es sei denn,
Sie eine
zusätzliche Konfiguration vor. Also habe ich den
Analyst gewechselt.
Ich glaube, wir hatten das als meine
Datenbank, dieser Benutzer, mein Benutzer, hat etwas
geheim gehalten, das wir schon gehört haben, sodass wir
tatsächlich weitermachen können. Ordnung. Als wir dann
zu diesem Bandabschnitt kamen, ist
der Grund, warum wir
das haben, sehr direkt. Im Grunde genommen ist
das Komponieren von
Docker-Containern leider kurzlebig, was bedeutet, dass sie nicht von Dauer sind was bedeutet, dass sie nicht Sie tun es nicht,
sie bestehen nicht. Also, was es bedeutet, wenn
der Container stirbt oder Ihre Daten, die Sie
darin haben, zusammen sterben Also, was ich mache, ist
, das so
zuzuordnen , dass es diese
Daten auf meinem lokalen System speichert. Acht. Genau das versuche
ich hier zu erforschen. Also mein Freund, wie
habe ich das bekommen? Wie komme ich da
durch, ist es. Wir würden uns also ansehen, dass
das Docker Hub ist. Damit Sie genau wissen,
wie ich dazu gekommen bin,
wenn ich zu Docker Hub gehe, um
Postgres einzugeben Postgres. Ja, Postgress Lupus, schätze, scrolle einfach nach unten. Es gibt immer einen
Pfad, wo es die Verwendung der
Daten
geht, siehst du diesen Teil? Daten. Man hängt in das Volumen ein, dieser Teil ist ein Volumen aus den OCCAT-Daten, das nicht
auf dem Gebirgsvolumen persistiert wird Du kannst das also sehen.
Es ist immer ratsam. Du bewegst dich, wenn du
diesen Teil liest , also wähle ich einfach
das Beispiel von hier. Wenn es Linux Mac verwendet, werden
Sie einfach
Ihre benutzerdefinierten Teile verwenden. Aus diesem Grund
wurde dieser Teil kundenspezifisch geschrieben. Benutzerdefinierte Teile, sie
ordnen es dem zu. Hier verbleiben die Daten im Docker-Container Ordnen Sie das einfach dem zu, was ich getan habe. Ordnung. Also da haben wir es. Ja. Und dann lösche das einfach. Jetzt kann ich
jederzeit ganz einfach
aus meinem Docker-Container löschen . Ich kann diesen Container löschen
, weil ich jetzt hartnäckig bin. So kann ich sicherstellen, dass meine
Daten tatsächlich da sind. Ich denke, wir können das jetzt ausführen. Lassen Sie uns das verdrängen. Lass uns sehen, was passiert. Mal sehen, was passiert. Ordnung. In Ordnung, in Ordnung. Okay. Was passiert? Das ist ein Fehler. Der Fehler ist mal sehen. Das ist seltsam, weil
ich weiß, dass das
automatisch funktionieren sollte , ohne
dass ich denke, ich mache hier
etwas falsch. Ordnung. Lass mich
einfach dieses Video posten und ich bin zurück. Ich
bin in einer Minute zurück. Ordnung, Leute. Ich
habe es herausgefunden. Mir ist aufgefallen, dass ich ein falsches
Passwort verwendet
habe und ein falsches. Du hast gefragt,
warum ist es falsch? Ich dachte
von Anfang an, ich kündige einfach. Ich persönlich
versuche, an
mehreren Projekten mit
mehreren Projekten zu arbeiten mehreren Projekten mit
mehreren Projekten Ich habe einfach für
sie
verschiedene Intriganten innerhalb der
Postgres-Datenbank gekündigt , verschiedene Intriganten,
dieselben Daten, sodass
ich nicht weiß , wie meine
Daten Ich behalte sie einfach in
dieser bestimmten Reihenfolge. Wie? Im Grunde habe ich jetzt ein anderes Passwort
verwendet. Für eine Datenbank, die bereits existiert, sollte
dasselbe Passwort gelten. Wie habe ich es
herausgefunden? So habe ich es gemacht. Wenn du auf diesen Typen triffst, kann
ich das direkt ausführen, ich kann das direkt ausführen. Intelligent hat also eine
direkte Integration Sie diese direkte Leitung tatsächlich
betreiben Sie sehen, wie das funktioniert. Wenn Sie also nachschauen, kann
ich die Logs überprüfen, folgen Sie
einfach diesem
Teil. Sieh dir die Logs an. Sie sagen also, es
startet, akzeptiert die Verbindung. Lassen Sie uns die
Anwendung ausführen und Sie sehen die Protokolle, die hier
tatsächlich angezeigt Führen Sie die Anwendung aus und wir sehen genau, womit
wir zuvor konfrontiert sind Derselbe Fehler. Derselbe
Fehler wird einfach auftauchen. Bum. Gut, sieh dir den Fehler an und dieser Fehler ist derselbe Fehler. Nun, wie habe ich einen
Fensterfehler bekommen, wenn ich hier reinkomme, wenn du dir dieses
Parskationsfeld für den Benutzer ansiehst Das ist das Problem. Ich
habe nicht korreliert Dies ist im Grunde das richtige
Passwort, das ich verwendet habe. Was ich tun werde, ist diesen Typen
einfach zu löschen. Damit
stoppe ich diesen Container, sodass wir jetzt
das richtige Passwort auswählen und
es tatsächlich hinzufügen können . Ich stoppe diesen Container.
Ich höre damit auf. Dann denk dran, ich glaube, ich
habe diese Funktion nicht erwähnt. Sobald Sie die
Anwendung gestartet haben, wird der
Docker-Container aufgerufen Sobald Sie die Anwendung beenden,
wird sie heruntergefahren. Wenn Sie jedoch möchten, dass die
Datenbank weiterläuft, können
Sie
sie einfach direkt starten. Sie führen es manuell für diejenigen aus, die mit Docker
vertraut sind. Kann ich Docker
verwenden, um alle
Details einzugeben, oder? Aber es ist immer ein sehr seltsamer langer Befehl, den ich nicht empfehlen kann Die Komposition ist
eigentlich ein guter Weg. Jetzt, wo ich diesen Kerl repariert habe. Jetzt lassen wir es direkt ausführen und sehen, wie es genau funktioniert. Ordnung. Lass uns das machen. In Ordnung, es kommt
hoch, es kommt hoch. Okay, siehst du, der Fehler ist weg, also war das die Lösung. Ich konnte erklären, was Docker Compose
physisch macht, und wie Sie ganz richtig sehen können, gab es keine Eigenschaft, keine
Datenbankverbindungseigenschaft Aber das ist bitte nur
zum Testen. Das ist nicht für die Produktion.
Das ist nur für Tests. Wenn Sie
zur Produktion wechseln möchten, möchte
ich eine Bereitstellung durchführen
, bei der am Ende des Kurses Docker Compose entfernt und
die tatsächlichen Eigenschaften verwendet werden Docker Compose entfernt und
die tatsächlichen Eigenschaften verwendet ,
damit wir
dem
tatsächlich helfen können . In Ordnung,
dies ist eine sehr
kurze Einführung in Spring Boots Docker Funktionsweise von Spring Boots Docker
Compose und wir sehen, dass ich einfach weiterentwickeln
kann möchte
ich eine Bereitstellung durchführen
, bei der am Ende des Kurses
Docker Compose entfernt und
die tatsächlichen Eigenschaften verwendet werden,
damit wir
dem
tatsächlich helfen können. In Ordnung,
dies ist eine sehr
kurze Einführung in
die Funktionsweise von Spring Boots Docker
Compose und wir sehen, dass
ich einfach weiterentwickeln
kann, ohne all
diese Dinge hier Alles klar. Danke, Leute. Dann alles klar.
Ich werde dich sehen. Tschüss.
7. Spring Modulith-Abhängigkeit erkunden: Ja. Hi, Leute. Hier
ist Z In Ordnung. Dieses Mal werden
wir auf Erkundungstour gehen. Wir konnten
ein bisschen einrichten. Jetzt ist es an der Zeit, das Federmodul,
das Federmodul,
einzubauen das Federmodul,
einzubauen Was ich normalerweise mache
, ist , dass ich, wenn ich ein Projekt
bereits ausgeführt habe und genau sehen
möchte , wie
die Abhängigkeiten aktualisiert werden können , dieses Programm
verwenden Nun, das war eine Neuerung
von IntelIggs. Danke, Leute Danke, Intellig. Ja,
du kannst das einfach anklicken Ja, um das zu laden,
was Sie vorher hatten, dann
verkabeln Sie neue Eigenschaften. Nun, für diejenigen, die Eclipse und Likes
verwenden, weiß
ich nicht, ob Sie diese Funktion
haben. Es tut mir leid, ich
konnte Eclipse nicht erkunden. Sie können dann die Abhängigkeit
hinzufügen, z. B. die Module,
die Sie hinzufügen möchten Module,
die Sie hinzufügen möchten sobald Sie sie hinzugefügt haben, und dann
auf Erkunden klicken Sobald Sie die Suche abgeschlossen haben,
können Sie
diese Version vergleichen , um zu sehen,
was noch fehlt, und sie
dann zu Ihrem Projekt hinzufügen Ich dachte nur, ich sollte das
eigentlich erwähnen. Was würde ich tun, würde ich auf meine fantasievolle Art
benutzen. Bitte beachten Sie. Ich liebe Intellij Ultimate. Ich bringe das rein, also
bringe ich es einfach mit Spring Model rein. Modul I ist unser
nächster Aktionsplan. Wenn wir das reinbringen, klicken
wir darauf. Ich werde sehen, was passieren würde. Die Magie passiert. Kannst du es
sehen? Alles kommt einfach rein. Bum, Bum, Bum,
Bum, Bum, Bum. Alles
kommt einfach rein. Wir haben eigentlich
alles verkabelt
, alles, was wir brauchen. Sie sehen, das Modell
hat den Kern eingebracht, es hat den Test gebracht,
es hat den Notendurchschnitt Erstens
ordne ich gerne Dinge neu an,
also denke ich, das sollte untergehen Ich werde das runternehmen. Es hat
wirklich keine Bedeutung , aber ich liebe es einfach, die Dinge ein bisschen
zu arrangieren. Ich liebe es, die
wichtigsten Leute an die Spitze zu bringen, sie bringen die Tests runter. Dann ist das ein
Test. Nehmen Sie es einfach
nach persönlicher
Präferenz auf, dann mache ich diesen Test
auch den Modulat-Test, dann nehme ich ihn einfach runter Dann denke ich, das sollte es sein. Ich denke, das sollte so
sein, sei einfach laut. Also, nachdem wir geladen haben und dieser
Typ dabei ist,
wollen wir als Nächstes das
Frühlingsmodul ein bisschen erkunden, oder? Lassen Sie uns einige
der Eigenschaften erkunden, richtig? Nur ein bisschen. Aber ich würde mich tatsächlich mit der Sitzung
befassen , wenn
wir anfangen, sie zu benutzen. Ich möchte nur, dass ihr seht
, wo sie
findet, wo ihr sie benutzen Bei Intelligent
gibt es also etwas, das man externe Abhängigkeiten nennt. Ich sehe, es zeigt
alles, was du verkabelt hast. Also das Verschieben von Versionen, wenn es gut ist, dass du Grado siehst wirst
du
Abhängigkeiten verkaufen können, oder? Das ist also die Abhängigkeit
, die es verkabelt hat, und Sie können sehen der Modulator aktiviert ist. Modulieren Ich gehe
dann auf diesen Pfad
und gehe zu Spring Modult Das ist ein Problem, Spring Modult. Lass uns einfach sehen
, was im Kern ist. Lass uns sehen, was im Kern ist. Es gibt ein Konzept,
das als Anwendungsmodul bezeichnet wird. Das ist eine
Code-Ebene. Das ist keine Arbeit. Ich hatte euch verwirrt. Das ist Arbeit? Die Idee ist
, das zu vereinfachen. Ich werde es
dir einfach zeigen. Ich will nur zeigen, dass diese Dinge hier erhältlich
sind. Sie sind tatsächlich verfügbar. Hier haben Sie alle Details unserer Quellen im Hintergrund wird
viel Arbeit für
uns erledigt. In den meisten Fällen, wenn wir einige Dinge an
der Oberfläche
verwenden und nicht genau
wissen, was im Hintergrund
passiert, wir vielleicht nicht wirklich
zu schätzen, was getan wird. Wir werden uns mit Dingen befassen, die
als Namensoberfläche bezeichnet werden. Wir werden das Name-Interface verwenden. Wir werden das
Java-Paket verwenden, nicht dieses direkt, sondern das Paket, das
das Paket verwendet, das Informationen enthält. Ich benutze das. Dieses Anwendungsmodul
ist auch im Anwendungsmodell enthalten. Ich möchte
unseren Test nicht wirklich schreiben , weil wir ein bisschen Test
schreiben. Dieser Typ
benutzt diese Typen auch , damit wir
genau sehen können, wie es hier funktioniert. Lass uns nachschauen. Lassen Sie uns
die API-Bits untersuchen, API. Das ist die API.
Schauen Sie sich die API an, es gibt
also diesen Teil und diese Veranstaltungspublikation
, mit der wir uns befassen werden. Wir werden uns mit abgeschlossenen
Veranstaltungspublikationen und unvollständigen Veranstaltungspublikationen befassen. Wir tun diesbezüglich einige dynamische
Dinge, einige einzigartige dynamische Dinge. Ich wollte es
euch nur zeigen, damit ihr
genau seht, wie das funktioniert, und wir würden
gleich reinspringen, um zu
sehen, wie ich im Grunde funktioniert. Es ist wirklich toll
, es zu benutzen? Es ist wirklich so, dass ich wirklich, wirklich ein toller Zoo für dich war. Also wollte ich das nur untersuchen
, damit wir wissen, wie das physisch funktioniert. Das ist also ein Frühlingsmodell. Spring Moduli, ich glaube etwas, das ich euch ziemlich schnell zeigen
möchte Oh ja, dieser Typ. Du siehst diesen Typ. Jetzt
haben wir so etwas wie Hinweise. Es gibt auch einen offenen. Bisher
war das nicht verfügbar. Deshalb habe ich
empfohlen, 30 zu verwenden. Wir hatten vorher keinen Test. Aber jetzt haben wir diesen
Anwendungsmodus, Sie möchten Open Closes verwenden. Ich würde all
diese Bedenken erklären, damit ihr genau wisst,
was das bedeutet, oder? Ich wollte
euch nur zeigen, dass dies
die letzte Verspätung war , als
wir auf 1d20 umgestellt Davor war es Windows 20,
ich war CRN, aber jetzt ist
es One Das ist eine gute Sache. Eine andere Sache, die ich
tun möchte, ist, dass ich jetzt, wo ich das
verkabelt habe , Code schreiben
werde, um die Dinge zu erledigen. Im Grunde würde ich wahrscheinlich die meisten bisher ändern
wollen, diese Abhängigkeiten, ich
möchte wahrscheinlich ein Github-Problem erstellen und alles
einem GitHub-Problem zuordnen. Ich glaube, ich habe Bruder Windows geöffnet. GitHub-Problem. Wie erstellt man ein
Github-Problem ganz einfach Gehen wir zu Github und
erstellen Sie ein Problem. Also mache ich das einfach
und nenne es eine Verkabelung von Abhängigkeiten,
Abhängigkeiten, Verkabelungsunabhängigkeiten Dann möchte ich auch eine
weitere erstellen , die
Sie schon einmal gemacht haben,
nämlich Spring Booth zu erkunden Frühlingsstiefel. Tut mir leid. Kein Stand. Frühlingsstiefel komponieren. So behalten wir den Überblick darüber, was
wir tun, sodass wir
genau wissen , wie wir bisher vorangekommen sind. Lass mich darauf eingehen.
Das sind die Jungs. Ich werde mich
gegen sie einsetzen. Ich denke also, das ist es. Dann werde ich euch am Ende
noch etwas zeigen,
lasst uns das machen, um Git-Commits zu machen Entschuldigung, ich weiß, dass manche
Leute es lieben,
das Interface oder
Git-Commits zu benutzen und nein Ich bin wirklich einfach Befehlszeile gewöhnt.
Ich liebe es wirklich Du bekommst Commits, dann gebe ich
den Namen ein, erkundend Du erkundest diesen
Kerl. Dann wird dieser geschlossen
, sodass Sie
dieses Schlüsselwort verwenden müssen. Schließt dann die ID. Dann hier auch die
Verkabelungsabhängigkeiten . Ich mache
das als Erstes. Sie können also mehrere Schließungen einfügen, oder Sie können
mehrere darin schließen. Schließt also. In dem Moment, in dem Git Hubble das
durchsucht. In dem Moment, in dem es sich
das anschaut und sieht, dass das Schlüsselwort geschlossen wird und es
die ID und den Assist sieht , wird
es auch diesen Typen schließen Sie können sehen, dass die ID
tatsächlich übereinstimmt. Das ist die ID für, wenn
ich eine von ihnen öffne.
Sie können sehen, dass ID die ID ist. Ich würde einfach schnell
schließen und dieses Fenster schnell
zurückziehen und
sehen, wie es funktioniert. Lass mich das einfach schließen und
dann geht es durch
den Push Get Push. Ja. Lass uns herausfinden, welcher fertig
ist. Sie sehen, das ist erledigt. Lass uns das auffrischen. In
Ordnung. Keine Probleme mehr. Weil warum? Sie sind geschlossen. Weil sie geschlossen hat,
deshalb habe ich das Symbol
hier gesagt, sie sind geschlossen. Oder wir fangen an,
Labels zu verwenden. Ich bin mir nicht sicher Du verstehst die Liste. Ab hier werden wir ab dem nächsten Video über
die Domains sprechen, die wir als Entitäten
verwenden, um
Spring Modulate
tatsächlich zu erkunden Danke Leute. In
Ordnung. Bis zum nächsten Mal.
8. Entitätsdefinition 1: Hallo zusammen. In Ordnung. Das
ist wieder Z. In Ordnung. Also würden wir
unsere Abhängigkeiten definieren oder wir
definieren unsere Entitäten, richtig? In diesem Video definieren wir unsere
Entitäten. Okay, also ohne
viel Zeit zu verschwenden , lassen Sie uns
einfach loslegen Wir werden hauptsächlich einige Entitäten
verwenden. Ich denke, wir deklarieren später
eine weitere, aber lassen Sie uns schnell darauf eingehen Zunächst müssen
wir also sagen, denken Sie daran, dass wir
es eigentlich mit Frühlingsmodulen zu tun Nur zur Erinnerung: Spring Modulate löst
tatsächlich die
meisten Herausforderungen
für diejenigen, Spring Modulate löst
tatsächlich die sich
nicht ganz sicher sind, ob sie
tatsächlich
einen Monolithen erstellen sollen oder ob sie zu einem Microservice wechseln
sollen Spring Modult hilft Ihnen dabei,
einen Übergang zu schaffen, zu dem Sie einen Übergang zu schaffen, zu dem Sie Denn die Wahrheit ist, dass es
einige Anwendungen gibt , von denen Sie
vielleicht nie in der Lage sein werden, ein
vollständiges Konzept zu haben oder zu verstehen, ob es sich
um einen Monolith oder um einen
Microservice handelt Aber Spring
Modult überbrücken Budgets, die so angelegt sind , dass Sie mit einem Monolith
beginnen und dann zu Microservices übergehen können . In Ordnung. Lassen Sie uns einfach
darauf eingehen, um zu sehen
, welche Entitäten wir
verwenden werden, um das tatsächlich zu tun. Daher werde ich eines der Dinge
verwenden, die klar spezifiziert oder im
Frühjahrsmodul
klar spezifiziert oder angegeben Alles wird als Modell
verwaltet. Und mit Modell meinen wir Pakete. Mit Modell meinen wir Pakete. Jedes Paket würde im Grunde alles
enthalten, was in sich selbst
definiert ist. Die Idee dahinter ist also,
wenn Sie jetzt bereit sind, umzuziehen, können
Sie das
Modul einfach so, wie es ist, in
einen separaten Dienst mit
wenig oder keiner Konfiguration verschieben .
Dieser Typ ist bereit, als
eigenständiger Dienst zu arbeiten. Das ist das Konzept, das wir
tatsächlich im Hinterkopf haben sollen. Stimmt? Wenn wir diese Schnitte in verschiedenen Paketen zusammenstellen, müssen
Sie sicherstellen, dass
sich jede Ihrer Entitäten oder zugehörigen Einträge an
einem bestimmten Ort befindet
und problemlos verschoben werden kann Wir bevorzugen also eine starke Entkopplung, damit es einfach ist, Dinge zu
verschieben Ordnung, lassen Sie uns darauf eingehen.
Das Erste, woran wir
arbeiten werden, ist,
lassen Sie uns darauf eingehen. Lassen Sie uns darin eintauchen.
Wir haben ein Inventar. Wir haben ein Inventar und benötigen
offenbar eine Entität, das
nenne ich
Inventar. Brauche ein Inventar und ist
anscheinend kein JPA, also übertrage ich die
Dinge einfach mit Ja Ich hoffe, jeder
kennt das Logbuch, damit wir leichter genau
wissen, wie wir Dinge
definieren Dann benutze ich eine private, meine ID soll lang sein Dann benutzen sie
einen privaten Straßennamen,
dann einen privaten, dann einen privaten, dann einen privaten. Dafür liebe ich Intelligent. A, KI gibt dir physisch
Vorschläge, arbeite einfach. Ich bevorzuge es,
wenn mein Pass lang ist. Jemand möchte vielleicht fragen warum Sie Long statt
D verwenden . Nachdem ich eine Weile im
Zahlungsbereich gearbeitet habe, habe
ich erkannt, dass Sie lieber mit
Long als mit
Double arbeiten
wollen, heißt das, stellen
Sie sich vor, Sie haben
so etwas wie, sagen wir, I Nigeria
five ny 535 nyra. Wenn
Sie Divisionen,
Multiplikationen,
Additionen und dergleichen machen, müssen
Sie sich nicht damit auseinandersetzen mit
Long als mit
Double arbeiten
wollen , heißt das, stellen
Sie sich vor, Sie haben
so etwas wie, sagen wir, I Nigeria five ny 535 nyra. Wenn
Sie Divisionen,
Multiplikationen,
Additionen und dergleichen machen , mit dieser Zahl. Das verursacht eine
Menge Probleme, oder? Selbst im Zahlungsbereich könnten
mehrere Probleme sogar
zu Klagen führen , dass ich
unterbezahlt war, ich wurde betrogen, und weil
diese Dinge
exponentiell wachsen können ,
je nachdem, welche Berechnung Sie tatsächlich verwenden Also würde ich es lieber vorziehen, oder? Benutze eine Lunge. Das ist
im Grunde ein langer Zirkus. Auf diese Weise machen
Sie den Aspekt
der Verwendung einer Dezimalstelle völlig überflüssig, und das hilft Ihnen,
Ihre Berechnungen einfach durchzuführen Wenn Sie also die vollständige
Version und
alles, alles herunterladen , möchten
Sie Ihre
Daten oder die Rechnung an
den Kunden senden oder
Zahlungen und Likes erhalten Wenn du also ein Double sendest, kannst
du es einfach mit 100 multiplizieren, richtig, und
alles als Long lesen. Wenn Sie zurückschicken
wollen, verlassen Sie Ihr System, teilen
Sie einfach durch 100 und
haben Ihre Dezimalstelle zurück, und das ist nur das Szenario. Danke. Wir haben das. Dies ist eine Entität, also
müssen Sie sie als Entität kennzeichnen. Auch als Tabelle wird
es einen Index geben, in
den man sie einfügen kann. Lassen Sie uns Indizes verwenden,
dann bei Index, bei Index, wie lautet dann
der Name des Index Ich möchte ihn INV name index
den Namen nennen , weil er nach Namen abgerufen
wird Wir brauchen Namen, um einer Spalte zuerst wirklich zu
helfen. Um dann tatsächlich das erste Lesen des
Namensfeldes
zuzulassen, oder? Ich bin mir sicher, dass wir uns bewusst sind, was Indexierung für die Komplexität
von Zeit und Raum
bedeutet Es erhöht die Zeit,
aber wie auch immer Sie einen Raum haben, Sie haben auch den
Nachteil, zusätzlichen Speicherplatz zu haben, oder? Sie haben auch den
Nachteil, zusätzlichen Speicherplatz zu haben, oder?
Dann aufgebraucht. Dann die Spaltenliste, auf die
wir abzielen, also muss das dem exakten Namen
entsprechen Wenn Sie also, sagen wir, hier eine Spalte haben
und
dann die
Spalte, die Sie als Namen definiert haben, nicht NAM
wäre, dann sollten Sie das
verwenden, was letztendlich in der
Datenbank stehen sollte, und nicht Ihr Feld Bitte seien Sie sich dessen bewusst. Wenn Sie eine Spalte verwenden, sollte
dies dem entsprechen, was
Sie als Spalte verwenden. Wenn dies jedoch nicht
verfügbar ist, verwenden Sie es. Wenn du zum Beispiel
auch
so etwas wie hast du auch so
etwas wie nennen wir es
einfach Namensfeld. So definierst du es zum Beispiel. Wenn du das so verwenden
willst, muss
es offenbar dieses Format sein,
weil das mit dem Format ist. So liest man es, denn meistens, wenn der Bin Mapper Dinge zuordnet, Ihr Feld
buchstäblich den Datenbankobjekten
zuordnet, würden
Sie feststellen, dass all
diese Blockbuchstaben transformiert wurden und Sie so etwas
haben Herr Aasha erwähnt, dass
wir weitermachen sollten. Ordnung. Das bedeutet, dass
wir eine ID definieren müssen, also wäre das eine ID. Ja. Dann generierter Wert, ja, ich will eine Identität. Ich liebe Intellig Jon is
IntelligTS. Ich liebe Und dann möchte ich, dass das nicht bekannt sein
sollte, das sollte nicht bekannt sein Dann möchte ich, dass es einzigartig ist, möchte
einzigartig sein. Ist ein bisschen einzigartig zu sein,
unterscheidet sich vom Index. Der Index bezieht sich auf die Werbezeit. Die Einzigartigkeit besteht darin, dass ich nicht möchte, dass
ein Objekt
genau dasselbe hat Ich möchte nicht dass ein Gegenstand der Erfindung dasselbe Namensfeld
hat Deshalb
muss der Name einzigartig sein. Nachdem wir das definiert haben,
lassen Sie uns schnell
weitermachen und definieren, lassen Sie uns
schnell das Repository definieren,
das Repository definieren. Ordnung, genau hier, nimm
einfach diesen Typen und ich
werde ein Interface erstellen. Ich bin mir sicher, dass Sie wahrscheinlich mit der Verwendung von
Schnittstellen oder
dem GPA-Verfahren
vertraut Schnittstellen oder sind. Definieren Sie das
einfach schnell Ich nenne das Inventar. Int, was tippe ich. Inventar, Positiv. Im Grunde ist es eine Erweiterung, ja, der Miteinzahler,
ich verwende eine lange Zahl,
keine Ganzzahl, eine lange Das ist
physisch notwendig,
aber ich liebe es einfach, zu schauspielern, nur um den Videos
meines Codes mehr Einblick
in das zu
geben, was Sie tun den Videos
meines Codes mehr Einblick
in das zu
geben meines Codes mehr Einblick Stattdessen wollen sie
es irgendwann beim Namen haben. Also ja, ich will das,
aber nicht namentlich. Ich will das, ich will es anhand des Inventars
finden. Suchen Sie nach EventualFind-Eintrag, finden Sie Eventu
Boots funktioniert
einwandfrei
oder finden Sie Eventu anhand des Namens oder Das ist es. Ordnung, es gibt
noch eine Variante ich
Ihnen sehr schnell zeigen würde, also das ist nicht
der Bereich dieses Gerichts, ich
möchte Ihnen nur zeigen Du könntest auch G
B verwenden. Das funktioniert auch. Sie sehen also, Sie können get
verwenden und es ist in Ordnung. Sie sehen, manche Leute
bevorzugen es, get zu verwenden. Es ist also genau das, was Sie
tatsächlich in der Firma, in der Sie
arbeiten, oder dem Projekt, an dem
Sie arbeiten,
verwenden wollen. Sie können also define by get by verwenden,
aber ich finde einfach, dass das konventionell
sein sollte, wie Sie sagten, Sie haben diese Konvention an die Sie sich
strikt halten, oder? Man folgt strikt
der Definition oder der Get-Methode. Ordnung, lassen Sie uns einfach bei
wahrscheinlich bleiben , ich bleibe einfach beim
Bekommen, ich bleibe einfach beim Get. Krank zu bekommen, weil ich weiß, dass viele Leute sich mit Finden
auskennen, also haben sie es einfach rausgebracht
, wo steht, dass es dann
auch das brauchen würde auch das brauchen würde Ich werde Event für Event brauchen ja, gib mir
zu viele Vorschläge. Sogar namentlich. Ja, es ist namentlich drin. Offenbar
bräuchte das eine Liste. Sie übergeben eine Liste von Namen, dann im Grunde das benötigte SQ, dann übergeben Sie eine Liste, nach all diesen Namen zu suchen und bekommen heraus, dass wir das brauchen
werden Ich denke, wir sind mit
diesen Teilen fertig. Lassen Sie uns dazu übergehen, dass wir auch ein Modell benötigen würden Kein Modul. Andere Stimmung. Im Grunde für das andere Modul. Wir wären also Sie würden
das zusammen mit der Bestellung benötigen Offenbar brauche ich die Bestellung. Bitte tu das nicht
zu Hause. Kopiere nicht. Kopiere es offenbar nicht. Also, das macht es
einfach schneller, richtig. Also ich glaube, ich
möchte dem einen Namen geben. Jetzt der Grund, warum
ich benutzen möchte. Der Grund, warum ich diesen Namen ändern
möchte ist, dass
Sie sich in SQL daran erinnern, dass
Sie so etwas wie „
Vielleicht bekommen“ etwas haben , Sie wählen wahrscheinlich
Stern aus einer Tabelle aus und
ordnen
dann nach, sagen wir, nach ID. Das ist ein reserviertes Schlüsselwort.
Es ist ein reserviertes Schlüsselwort. Wenn Sie
Order verwenden, ändere
ich aus diesem Grund eine
SSS-Bestellung und gebe sie auf, damit es nicht zu
Konflikten kommt Aus diesem Grund entdecken
Sie meistens, warum Sie denselben Namen verwenden ,
der eigentlich
ein spezielles
Schlüsselwort in der Datenbank ist Sie sehen, dass JP grundsätzlich
einen Fehler anzeigt , sobald Sie die Anwendung tatsächlich
ausführen. Ich wollte das nur
erwähnen. Das haben wir. Dann bräuchte ich eine lange. Lange ID, dann eine private Zeichenfolge,
ich glaube, das nenne ich
Order Identifier Alles wird
bald zusammengefügt, Auftrags-ID. Dann habe ich auch eine private
Zeichenfolge für den Kundennamen und dann eine private
private Zeichenfolge. Ich denke, du kannst einfach ein Ps
machen. Sollte funktionieren. Dann ein privater Zeitstempel , weil ich
PostgresST Stamp oder dt verwende Ein privater Zeitstempel oder so, dann müssen Sie sicherstellen, dass es sich ein Java SQ handelt, das wir Datenbank interpretieren
werden Dann möchte ich stattdessen
Standard studieren,
ich will nicht, dass Millis Ither
Instant Instance Dot jetzt machen Ich möchte Instant machen,
das sollte sein, wenn
das der Fall ist, es sollte Timestamp von sein Von. Fein. Das
funktioniert. Das funktioniert. Dann auch etwas Einzigartiges. Ich möchte einen privaten Status hinzufügen. Wir brauchen einen Status, einen
privaten Status, einen Status, dann möchte ich, dass sie
aufgeschoben werden Also genau wie wenn
Sie eine Bestellung haben, die andere noch
offen ist oder Ihre anderen
geschlossen sind oder die andere gescheitert Also im Grunde ist das der Status, den ich hier darzustellen
versuche. Also Status, Status, das ist offen. Also ist es jetzt an der Zeit, unseren Status zu
definieren. Also erstelle ich in diesem Paket
ein weiteres Paket mit dem
Namen Typ C, dann hat es anscheinend den
Status Annum Num Num. Dann wäre es von zwei Typen, offen und dann abgeschlossen Ich denke, das funktioniert. Dann
mach jetzt ein privates Finale. Zeichenkettencode. Ich möchte nicht, dass genau dieser Name
in der Datenbank steht, deshalb verwende ich gerne Buchstaben. Ich sollte ein guter sein. Dann sollte dieser Typ ein
C-Typ
sein, der sich beschwert, weil er
einen Getter braucht. Danke Umbox kann einfach Umbok direkt verwenden beschwert, weil er
einen Getter braucht. Danke.
Umbox kann einfach Umbok direkt verwenden und dann
den X-Konstruktor verwenden,
und das sollte zufrieden sein. Überhaupt X-Konstruktor. Das sollte sofort
erfüllt sein. Damit können wir die Dinge hier ganz einfach
verkabeln. Ja. Ja, du siehst die Typen da drin. Ich bin
in einer Minute wieder hier. Ich
bin in einer Minute zurück, um das zu reparieren. Wenn wir
darüber nachdenken, brauchen wir einen Weg. Also ich weiß, die meisten Leute würden es
wahrscheinlich einfach benutzen wollen, oder ich habe viele Leute gesehen,
die einfach at enumeraated
benutzen Und das behandelt nur den Verfall. Aber das Problem dabei ist, dass
, wenn Sie eine Aufzählung verwenden,
es anfängt, Zahlen zu verwenden, oder? Zahlen, beginnend bei
Null, Eins. Wenn du
hier noch etwas hinzufügst, um zwei zu bekommen. Das Problem ist nun, wenn
du jetzt etwas auswählst, sagen
wir, du fügst hier ein weiteres
Objekt hinzu, oder? Sie fügen hier noch etwas hinzu, nennen es wahrscheinlich gescheitert, oder? Deine Nummer ist durcheinander geraten. Die Nummerierung wird durcheinander gebracht und das allein kann nicht zu Fehlern
führen, weil Sie nicht direkt haben,
Sie nicht strukturiert haben oder wahrscheinlich jemand anderes das Projekt
ausgewählt Deshalb bevorzuge ich es, das zu verwenden. Ich habe immer
einen Typkonverter. Hallo Typkonverter, und ein Typkonverter würde diesen Typen
konvertieren. Ich nenne es Statuskonverter. Statuskonverter. Wir verwenden einen
Statuskonverter und dieser Konverter würde einen
Attributkonverter implementieren. Attributkonverter.
Das wird funktionieren. Sobald Sie es dann beim
Konverter beim
automatischen Anwenden des Konverters beschriften ,
erfolgt das automatische Anwenden. Ich muss hier
nichts mehr hinzufügen. Lass es einfach so wie es ist. Weil ich das implementiert habe, sieht Spring, sobald er mein Projekt
durchsucht
hat, den Status
des Statuskonverters. Ich gebe es einfach hin, um
genau zu sehen , wie ich
modelliere und sage, so
will es auch geil sein, cool. Dann weiß es
genau, was zu tun ist. Lassen Sie uns das schnell
umsetzen. Ja. Also das willst
du konvertieren? Ich konvertiere diesen Typen in
eine Datenbankspalte. Also, was sollten
Datenbankspalten dargestellt werden. Ich mache also bereitwillig
einfach ein
Array, die Zeichenfolge, dann mache ich einfach den Status,
die Werte, dann mache
ich das, dann filtere ich einfach Lassen Sie uns Status und Status filtern. Setzt gleich Status, gleich, nennen wir die Staaten. Syntus Dem Status aussetzen. Wenn diese gleich sind,
wenn sie gleich sind, dann ordne ich zu, dann ordne ich
den Status zu, dann eine Referenz Dann finde ich zuerst heraus oder sonst
wie eine Ausnahme. Also eine Ausnahme, die ich zeigen möchte. Ich möchte wahr sein, eine Ausnahme
auslösen. Lassen Sie uns einfach ein
neues rechtliches Argument vorbringen. Wir werden das ändern. Wir werden
das später ändern, oder? Ich werde das später ändern.
Wann würden
wir unsere Ausnahmen oder benutzerdefinierten
Ausnahmen definieren wir unsere Ausnahmen oder benutzerdefinierten oder zu Änderungen
zurückkehren? Das sind Ausnahmen. Alles klar. Dann hier drüben, möchte
ich
dieses Blässhuhn dann genauso
nennen . Jetzt nehmen wir das gleiche
Array, bei dem die Werte auch nicht passen.
Einfach nicht kauen Dann das Feuer, jetzt prüfen
wir, ob jeder Code,
der den Status
erhält, gleich ist Ist gleich oder geht es um den Signalfall, dann
entspricht der Code dem Code Dann finden wir zuerst. Oder wir zeigen, dass das einfach der
Code nicht gefunden werden kann, oder? Der Status Life by
Status wurde also nicht gefunden. Also, was macht das?
Lass mich das erklären. Das funktioniert also, sobald Sie in einem
bestimmten Status verharren, in diesem Fall, sagen
wir, Sie wählen
, dass Sie
einen offenen Status einreichen , was die Standardeinstellung
ist Dieser Konverter wird
aktiviert, er wird prüfen. Was versuchst du
vom Status
in die Datenbank zu konvertieren . Also überprüfe das, dann
ordnen wir den Code so zu,
dass er diesen Code verwendet. Dieser Code ist genau das, was
wir in der Datenbank persistent machen. So funktioniert es. Sehr
einfacher Code. Das Gleiche passiert hier. Dieses Mal, wenn Sie den
Code wieder in eine Entität konvertieren möchten , in die Entität konvertieren möchten,
um zu überprüfen, was hatten Sie? Welchen Code haben Sie
in der Datenbank? Siehst du, wählt dann das C aus, kommt
dann hier rein, es schaut nach,
welches mit C übereinstimmt? Sobald Sie den Status , der den Code tatsächlich enthält, C, dann findet es ihn gibt ihn zurück. Im Grunde funktioniert das so. Dies löst tatsächlich den Fall
, dass Sie mehrere Formen
von in verschiedenen Formen verwenden und
versuchen müssen von in verschiedenen Formen verwenden und , in der Datenbank
zu Das ist es, was ich am meisten bevorzuge. Zurück zum Thema.
Korrigieren Sie schnell diesen schnellen Blick hier
oben, stehlen Sie einfach diesen Code. Komm einfach her.
Bitte tu das nicht. Lass uns kopieren und einfügen. Jetzt haben wir das. Das
konnten wir, dann würden
wir auch auf Entdeckungsreise gehen. Wir würden auch
ein anderes
codiertes Attribut oder eine andere Entität
namens Or Inventory untersuchen . Jetzt anderes Inventar. Ich würde
erklären, warum ich ein anderes Inventar
haben werde. Der Grund, warum ich Inventar
haben werde ist, dass, wenn Sie
sehr genau beobachten, ich habe diese Entitätsbeziehungen nicht verwendet,
ich habe
diese Entitätsbeziehungen nicht verwendet ,
wie Eins zu Eins, Eins, Viele zu Viele
oder Viele-zu-Eins. Denn wenn Sie
Federmodule bauen, müssen
all Ihre Module stark
entkoppelt sein , und weil
sie entkoppelt sind, werden sie in
dem Moment, in dem Sie anfangen,
Objekte zu
verkabeln sie wie
viele, viele zusammenfügen , sie wie
viele, viele zusammenfügen, sofort fest miteinander verbunden, weil sie voneinander
abhängig sind. Und das ist hier nicht das Ziel. Das Ziel ist es, die Dinge tatsächlich
locker zu koppeln,
sodass Sie
ein Modul einfach nach Belieben verschieben können. Mein anderes Inventar wird
dann die Beziehung
zwischen dem anderen
und dem Inventar verwalten . Also im Grunde
versuchen wir nur nachzuahmen, was GPA tut Und das ist es, was Sie im Grunde im wirklichen Leben tun
möchten. Sie erstellen eine Tabelle
, um dann
diejenigen zu verwalten , die tatsächlich eine
Beziehung zueinander haben. Okay. In Ordnung. Ich glaube
, das ist klar genug. Also lass uns reingehen. Ich schlesse, sie kopieren das einfach. Ich kopiere das einfach.
Es ist dasselbe. Es ändert sich nicht.
Es ändert sich nicht. Also werde ich dasselbe bei Geta haben,
auf See, bei Entity,
bei zwei Saiten Zwei Saiten, zwei
Saiten, zwei Saiten. Zwei Saiten. Eine
Zeichenfolge, dann eine Tabelle. Dann wird meine Tabelle Indizes haben. Meine Indizes werden es haben also möchte ich nicht nur
einen Index haben, sondern mehrere Jetzt frage ich mich, woher ich weiß, dass das ein Vielfaches wäre,
ich kann mehrere nehmen Integg gibt ein Feature aus,
sobald Sie es innerhalb
der Klammer platzieren , einfach nach Westen
Control P. Ja, Control P oder ich denke, es
sollte Befehl P auf dem MAC sein Sie sehen also, dass der Index
tatsächlich ein Array benötigt. Es ist ein Array, das benötigt wird, sodass Sie mehr als eines haben können. Sie können also
eine dort platzieren oder Sie
platzieren sie in dieser Kollibrase
und haben mehr als Was wir also haben, ist ein Index
im Index, dann der Name, ich nenne diesen anderen Index,
ID, IDX und die
Spaltenliste, auf die ich Nun, das war nicht ohne Grund
Kolumnist für Libia. Spaltenliste ist die andere ID.
Ich komme wieder her. Wir werden sehen, wie wir
sie definieren. Das heißt, Sie können definieren, ob Sie mehr als einen
haben, verwenden Sie
einfach einen durch Kommas getrennten Wert und Sie können die anderen Typen
haben Dann ist das bei Index
der zweite? Das sollte der MV-Index sein. Wir müssen tatsächlich für
das Inventar lesen , dann wird die
Spaltenliste die Inventar-Venture-ID
sein. Das funktioniert. Es sollte ein separater
Command Caster sein. Das sieht gut aus.
Das sieht gut aus. Das private Long oder die ID, das sollte lang sein,
nicht lang, oder? Erst eine lange ID, dann eine
private, lange Abenteuer-ID. Danke, Spring
oder Intelligent. Dann privat in großen Mengen. Ich glaube, ich nenne das QTY.
Die Menge ist einfach zu lang Dann Privateong Private Long, ich möchte diese
Gesamtmenge Mengenpreis nennen Ich weiß nicht, ob das funktionieren würde
. Ich schaue es mir noch einmal an. Noch ein Ausweis, alles klar,
überprüfe, das kann auf jeden Fall helfen. Okay, es ist in Ordnung. Es ist in Ordnung.
In Ordnung, lassen Sie uns weitermachen. Lass uns weitermachen. Wir würden tatsächlich
sofort wiederkommen, wenn wir das definieren. Ich denke, wir müssen nur schnell Repositorien
definieren, um das, was wir zu tun versuchen, tatsächlich widerzuspiegeln Ich denke also, dieses Video wird
zu lang, oder? Es wird zu lang, also
muss ich das
schnell beenden, schnell abschließen. Lassen Sie uns schnell
unser Repository definieren. Ich komme einfach hierher oder ins
Repositorium. Ich nenne es einfach ein
Repos, eine Schnittstelle. Dann
verlängert es hier tatsächlich die Länge, das funktioniert als Repost, dann brauche ich nur noch, aber das ist nicht das, was ich Ich möchte eine andere Kennung finden.
Das brauche ich. Das ist es also, was ich brauche. Ich will
nur die Kennung. Sollte eine Zeichenfolge sein, glücklich. Nenn es einen anderen Bezeichner. Das brauche ich im Grunde genommen hier. Wenn Sie dann
das andere Inventar überprüfen, wird das
andere Inventar ziemlich einzigartig sein, da Sie eine native Abfrage
schreiben werden. Rufen Sie dieses Inventar-Repository auf. Ein anderes
Inventar-Repository als ein Repository. Dann haben wir das, was ich erreichen
möchte, ist , dass
ich einen Betrag für die Bestellnummer
oder den ID-Betrag haben möchte. Die Abfrage macht also
Sinn, das zu verleumden. Dann geben wir die Bestell-ID weiter. Also eine bestimmte Bestellnummer, ich will den ganzen Betrag, richtig? Die bestimmte Bestell-ID. Ich möchte, dass alle Mengen, wissen
Sie, Sie haben ein Inventar, unter dem
Sie diese
Bestellung aufgegeben haben, eine Liste von Lagerbeständen
enthalten können eine Liste von Lagerbeständen
enthalten Also alle Beträge, wie alle Inventarbeträge,
alles zusammenzählen Das Inventar kann
für Inventar A sein man kann zwei
haben, man kann zwei
für Ereignis B haben, kann drei ,
53, vier haben, man kann sechs haben, alles zusammen
machen, ich will alles hier haben. Deshalb werde ich die Anfrage
schreiben. Das wird eine Anfrage sein. Er kommt
einfach als Muttersprachler vorbei. Geben wir native, query true und dann den Wert ein. Der Wert lautet
„Wählen Sie Summe“ und dann „Inventar“,
da Sie aus dem Inventar Punkte
erhalten. Die Gesamtsumme denken Sie daran, dass wir das definieren, wir
definieren diesen Bereich. Die Menge, der Preis, so sollte er sein in der Datenbank angegeben
werden. Unterstreichen
Sie dann den Preis aus dem Inventar Unterstreichen Sie Inventar. Ich denke, lass mich
das machen , dann ist das in Ordnung, damit
wir es nicht wiederholen müssen, also platziere das hier, OI und das funktioniert oder das Inventar
, damit das die andere Sie können einfach sagen, dass Oi
ID dem entspricht, was ein Nennwert ist, den
Sie verwenden können, der ein Phasenwert ist Wir haben das. Das ist eine Schnittstelle und Sie
erweitern, um die Crowd zu erweitern Nein, ich glaube nicht, dass ich den vollen
Notendurchschnitt brauche. Nun, ich weiß, dass jemand fragen
könnte, warum benutzt du
Crowd oder No GPA mit all den
Funktionen, die ich benötige Lassen
Sie uns mit all den
Funktionen, die ich benötige, zum Beispiel darauf zurückkommen Schau dir hier alles an, was ich brauche.
Das ist genau das, was ich brauche und das
in der Menge verfügbar ist. Nun, wenn Sie Notendurchschnitt einbringen, bringen
Sie
zu viele Dinge Schau dir diesen GPA-Repost drei an. Wenn du darauf klickst, siehst du,
du bringst das alles rein. Ich brauche
das alles nicht, bring eins,
zwei, drei, vier,
fünf, sechs, sieben,
acht, neun, zehn, 11, 12 rein, du bringst 12 andere
Leute mit, die verfügbar sind. Und das beinhaltet auch
, was wir im Code haben. Sie sehen, das enthält den
Code bis zum geringsten Code. Wir
brauchen im Grunde nur das Kabel. Der Code beinhaltet nur die grundlegenden Dinge,
also ist das
in Ordnung. Denn was du mitbringst,
wenn du JP, P mitbringst, bringt alles
in sich zusammen und außerdem wird
alles zusammen
aufgelistet, sodass du das alles nicht brauchst. Deshalb bleibe ich bei
Code Depository. Ich denke, wir sind damit fertig. Warum beschwert sich der Typ? Weil ich den Dialekt nicht eingegeben habe. Lassen Sie uns den Dialekt nach der Krise ändern . Machen wir es glücklich? Warum nicht glücklich? Weil ich nicht mit der Datenbank verbunden bin.
Lass es einfach liegen. Das funktioniert. Wählen Sie das andere Inventar, die
Menge, den Preis daraus und
dann den Ort, an dem die ID
getestet wird . Das ist
im Grunde das, was ich brauche. Deshalb bin ich dazu in der Lage. Okay. Ich glaube, das
wird ziemlich lang. Das wird ziemlich lang. Ich mache es einfach
hier kaputt und wir machen im nächsten
Video weiter. Danke.
9. Entitätsdefinition 2: Ordnung. Danke, dass du
zu mir zurückgekommen bist. Wir müssen wirklich sehr schnell
weitermachen , weil ich denke, das letzte
Video war ziemlich lang. Ich war ziemlich lang,
und das hat zur Folge, dass wir im Laufe der Zeit
einige der wichtigsten Dinge ansprechen mussten weil ich weiß, dass ich vielleicht
einige Konzepte verwende vielleicht relativ neu manche Leute
vielleicht relativ neu sind, und ich
musste nur schnell
ein bisschen erklären , damit das Filmset dann persönlich gemacht werden
kann. Ordnung. Also das nächste Modell wir brauchen, ist das Zahlungsmodell. brauchen also das
Zahlungsmodell, das Zahlungspaket Ich glaube, Sie
verstehen das Konzept jetzt, also Zahlungspaket Also, wie
funktioniert das sofort? Also was wir machen, sind
dieselben Konzepte. Lassen Sie uns unsere Entität erstellen. Äh, was ist das geworden? Okay. Lassen Sie uns unsere
Einheit namens Payments gründen. Also nenne diese Zahlungen
und wie immer schicke ich das einfach an diesen Typen, damit du diese Leute nicht einfach
auswählst. Ja. Zahlung ist also
kein Reserve-Keyword, also kann ich das einfach entfernen. Ich entferne das einfach komplett. Ich brauche das nicht ganz. Das sollte einfach in
Ordnung sein. Alles klar. Lösche meine Eingaben.
Gleichzeitig fasse ich das einfach zusammen weil alles dasselbe sein
wird. Ordnung. Großartig. Das haben wir. Dann lassen Sie uns schnell die anderen Felder
definieren. Zeichenfolge oder eine IDO-ID
erforderlich Hier ist eine Zeichenfolge oder eine IDO-ID
erforderlich, da dies im
Grunde die andere Tabelle war. Dann haben wir den
privaten Long-Betrag. Denken Sie daran, wir halten uns
an die Beträge und dann an den
privaten Zeitstempel. Privater Zeitstempel,
Java SQ-Zeitstempel, nennen
wir es Zahlungsdaten Ich bleibe einfach
bei derselben Sache. Du kannst Loot Dates Time verwenden, ich bleibe einfach bei Timestamp,
Timestamp von damals Instant Dann haben wir den
privaten Zahlungsstatus Das ist eine weitere um, mit der
wir arbeiten Status als Mann, wir müssen es wissen. Jetzt oder vielleicht abgeschlossen, aber die Zahlung
ist nicht abgeschlossen, vielleicht haben Sie es versucht,
Entschuldigung, die andere ist
möglicherweise offen, die Zahlung
ist nicht abgeschlossen. Aber die Zahlung ist abgeschlossen,
Ihre ist abgeschlossen. Ich glaube, wir verstehen
das
Konzept, das versuche ich hier
herauszubringen. Lassen Sie uns das verwenden und wir verwenden einen Zahlungsstatus, der
unvollständig ist, als Grundlage. Sobald der Vorgang abgeschlossen ist, vervollständigen
Sie ihn. Hallo, erstelle unseren Zahlungsstatus. Wir wissen, wie es läuft,
das Gleiche. Wir erstellen einfach unseren Typ.
Ich beschränke ihn auch auf das Modul oder jetzt
auch auf das Modul oder
Paket, so wie wir es
verstehen Ich mache das einfach.
Erzeugt die InnumT-Werke. Ich brauche Geta und
den laxen Konstruktor. Geta, kein laxer Konstruktor, weshalb wir ihn nicht brauchten . Okay, geh und bring
die Eingaben zusammen. Dann wollen wir unvollständig. Unvollständig, ich füge
das zusammen mit mir in Daten ein. Ich habe diesen
Konzeptbereich erweitert und dann abgeschlossen. C, und ich habe auch 1 Maulwurf. C, dann kann es sich füllen. So gefüllt. Aber der
AF. In Ordnung. Dann müssen
wir offenbar den Code definieren, den
Sie verwenden. Ich möchte es Code nennen. Also sollte
es endgültig sein, ich weiß Ändert sich nicht. In Ordnung. Also dann
wird dieser Typ jetzt glücklich sein. Sobald du es reingebracht hast.
Dieser Typ ist glücklich. Definieren wir den Konverter. Ich habe der Arie erklärt,
warum ich einen Konverter verwende. Der Grund dafür ist, dass
es wieder einmal verhindert, dass einige der aufgezählten Probleme tatsächlich analysiert werden
. Also habe ich einen
Zahlungsstatuskonverter. Sie können einfach beide in
dasselbe Paket packen, oder? Das ist der Typ und
der Typkonverter. Ich mag es einfach, Dinge zu trennen. Manchmal haben wir vielleicht Projekte bei denen Sie Typen innerhalb des Modells
verwenden, die
einfach erweitert werden können, sodass Sie den Text irgendwo behalten
wollen, den Konverter
irgendwo
behalten wollen, oder? Das versuche ich hier
zu erreichen. Dann
werden wir, wie wir wissen, jetzt
implementieren, den
Attributkonverter implementieren. Ich weiß nicht, warum dieser
Typ diesen Kerl gekauft hat. Attribut-Attribut-Konverter, dann
Zahlungsstatus-Zeichenfolge, dann Konvertierung, dann Konvertierung, dann
Konverter auf Apply True. Dieser Typ will die Implementierung,
wir implementieren sie. Dann können wir im Grunde genommen dann, äh das, dann können wir einfach im Grunde überprüfen, was wir zurückgeben? Wir könnten durchschauen, um zu sehen, was wir in eine Datenbankspalte konvertieren ,
was reinkommt. Vorher glaube ich, ich bin gerade hier. Ich glaube, ich habe einen Overquur gemacht anstatt das alles durchzumachen, hätte
ich einfach sagen können, lass uns einfach
lassen, es ruiniert nicht
wirklich Ich sage nur, dass es eine
Übertreibung gab, die ich einfach
hätte sagen können,
wenn ich es einfach umdrehen könnte,
anstatt
diesen Long-Code-Status durchzugehen S wenn der Status Null ist. Es gibt keine, dann wurde eine neue
Ausnahme für ein unzulässiges Argument nicht gefunden. Es wird Null sein,
dann setzen Sie einfach den Code ein. Und einfach Code. Das
wird funktionieren, oder? Ich werde nur sichergehen, weil das
anscheinend verfügbar ist. Wenn es nicht Null ist, was bedeutet, dass
es existiert, und wenn es existiert, bekommen
wir einfach den Code.
Das wird einfach direkt sein. Aber dafür, damit wir dann herkommen
können. Nennen wir diesen Code.
Das ist also der Code, danke. Danke ist zu vervollständigen. Dann funktioniert das dann hier, dann zu meinen Arrays, dem Stream, dann zu
meinem Zahlungsstatus, den Werten, dann filtern Wenn der Statusstatus einen Code erhält
, der gleich ist, ignoriert er Good. Wenn wir dann feststellen, dass
wir das erste Mal drehen sind wir sonst
eine Ausnahme Eine Ausnahme. Im Moment ist
es nicht wirklich so, dass wir wissen, dass wir vielleicht nicht nur
Referenzreferenzen machen wollen, damit wir das nicht brauchen. Ja. Ja, wir werden diese Ausnahme
später ändern, sobald Sie unsere Ausnahme eingeführt haben weil
unsere Ausnahme die Verwendung von
Konzept-Cardpo-Modellen
wäre , oder? Lass uns einfach weitermachen,
oder? Das ist wahrscheinlich schon das Ausschneiden aus dem
Sack. In Ordnung. Also ich denke, wir haben, was wir brauchen, wir brauchen den Repost, das
wäre eine Schnittstelle Dann nennen wir es
Zahlungen, Pos Drei. Dann wird es den Code erweitern. Dann als Repos drei. Interessant. In Ordnung.
Also, was brauchen wir? Ich denke, du
musst es nur mit Okay finden. Sie müssen
Celestial nur optional finden. Im Moment nur um herauszufinden, dass
wir GG-Zahlungen verwenden. Nach Bestellnummer. Bestellungs-ID. Finden Sie Zahlung per Bestellung, IT. Nein, nein, nicht bestellen bis. Nun, das ist nach Bestellnummer. Ja, das meine ich. Die Bestell-ID ist eine Zeichenfolge. Oder Idee. Okay,
ich denke, das ist einfach Lassen Sie uns einfach schnell unser
Repostre durchgehen. Ja, lassen Sie uns
diesen anderen Kerl durchgehen. Ja, okay, oh, tut mir leid, G. Ich
möchte konsequent sein. Entschuldigung, ich denke, das ist ein Versehen,
sie sind einfach konsistent. Repost mit Gets,
dieser tolle Gets. Irgendwann. Oh ja,
ich vermisse Get. Es ist großartig.
Fantastisch. Das sind also im Grunde die Entitäten, die mit uns zusammenarbeiten
werden Dieser eine Ant-Server Ich habe ihn auf meinen neuen Stub gestellt
und er hat ihn gerade gekauft Mit diesen werden
wir im Grunde arbeiten und das sollte der Kern sein Im nächsten Schritt
erstellen wir ein Problem. Lass uns ein Problem bekommen.
Bringen wir es rein. Das Problem, das wir noch einmal abbilden sollen
. Ich nenne es einfach Entitäten. Ich nenne es einfach Bs-Entitäten, weil es andere Entitäten geben
wird, Bz-Entitäten, Bs-Entitäten oder vorläufige Entitäten
oder sollten kündigen Okay, Besentit ist in Ordnung.
Wir mögen das hier einfach Dann kopiere ich das einfach,
dann kommen wir zurück. Dann begehen Sie das einfach
dagegen. Also gut. Begeht. Dann schließt sich das
dann einfach Ordnung. In Ordnung, keine Probleme, kein geheimer Post, dann wird gedrängt In Ordnung, lassen Sie uns
sehen, dass das funktioniert. Interessant. In Ordnung. Also ja, das haben wir
geschafft Wir waren in der Lage,
alle Entitäten zu erstellen, die wir benötigen. Ich denke, wir können mit
dem nächsten Video beginnen , um es zu erklären oder
die nächste Phase zu durchlaufen. Danke.
10. Repositry-Zugriffsebene begrenzen: Ordnung. Danke, dass du mit mir
zurückgekommen Hier ist Z wieder. In Ordnung. Also, was wir in
diesem Abschnitt oder in diesem Video tun werden ist, dass wir jetzt damit beginnen
müssten,
den Zugriffsmodifikator
unserer Schnittstellen einzuschränken den Zugriffsmodifikator
unserer Schnittstellen Wir wollen nicht, weil wir wissen, dass wir Dinge
aus der Datenbank bekommen werden, wir wollen nicht, dass die Dinge
ablaufen Ich möchte nicht
, dass dieses Modul weiß,
was hier passiert. Ich möchte nicht, dass dieses Modell weiß, was hier
passiert. Also was ich tun würde,
es geht sehr schnell. Also nehme ich das ab, das ist
die Essenz des Modulith. Wir sorgen dafür, dass niemand genau weiß
, was hier passiert. Wir setzen also tatsächlich durch, dass Sie
keinen Zugriff darauf haben. Wenn es um die andere
Position geht, entferne ich diese. Komm zur Inventarposition,
ich entferne das. Ordnung. In Ordnung. Das Gleiche wird
hier drinnen passieren. Ich würde das entfernen, oder? Denn am Ende
des Tages solltest du die Schnittstelle
nicht
von woanders aufrufen. Wenn Sie einen Dienst benötigen, möchten
Sie wahrscheinlich einen Dienst
erstellen und den Dienst dann hier verkabeln. Aber im Grunde
wäre das ein anderes Konzept, über das
wir bald sprechen würden, oder? Wir werden jetzt so
genannte benannte Schnittstellen für
etwas haben , das wir
von einem Modul zum anderen verfügbar machen wollen. Aber denken Sie daran,
dass Sie in dem Moment, in dem Sie anfangen,
das eine nach dem anderen zu haben ein
bisschen Kopplung eingeführt haben. Aber wenn es vermieden werden soll, wenn Sie es vermeiden können, vermeiden Sie so viel wie möglich. Aber Sie sehen, in diesem
Szenario ist es etwas, das
dringend benötigt wird. Also in einem sehr kurzen Video nur um zu zeigen, dass wir
anfangen werden, die Dinge einzuschränken, und wie Sie sehen können,
ist unser Repository nicht mehr verfügbar Um also einen Dummy zu erstellen, wir einfach
einen Dummy-Service Lassen Sie uns einen Dummy-Service erstellen und ich nenne ihn order
would not commit this Ich werde das nicht festschreiben
, weil wir
zurückkommen werden , um
Eigentum zu machen und später Ich nenne das O-Service. Ich würde das jetzt nicht begehen. wir einfach davon aus, dass es sich um einen
Dienst oder eine Komponente handelt, unabhängig davon
, ob es sich um einen Controller handelt Jetzt versuche ich, ein privates
, letztes Inventure einzubringen letztes Inventure Verfahren zur Inventarisierung. Siehst du? Sie können das Verfahren nicht finden. Eine Pose. In Ordnung. Siehst du? Das wurde nicht gefunden.
Und was steht da? Dieses Unternehmen ist nicht öffentlich in diesem speziellen Typ
kann ich nicht über das Seitenpaket darauf zugreifen
. Das ist genau das,
was ich erreichen wollte. Ich werde das schnell entfernen.
Ich möchte nur schnell zeigen, dass es nicht
mehr zugänglich sein wird, und ich denke, das war's. Wir können dann mit
dem nächsten Video fortfahren. Fangen Sie an,
die Dinge einzuschränken und zu zeigen jedes Modul so weit
wie möglich eingeschränkt bevor wir jetzt anfangen,
tiefer zu gehen, um zu sehen, wie wir die
Dinge aufdecken und wie sie
dann anfangen , miteinander zu
sprechen.
In Ordnung. Danke.
11. Inventar vorab füllen: Okay, Leute, danke, dass ihr mit mir
zurückgekommen seid. In Ordnung. Also, was werden
wir von nun an
tun, einige Kernimplementierungen Zuallererst denke ich, dass wir das
weniger
verkabeln müssen, damit wir es nicht
ungeschützt lassen Also mache ich einfach dasselbe, was
ich vorhin gemacht habe. Ich wähle die
Ausschussnachricht aus, die ich bereits
auf meinem anderen Bildschirm geöffnet habe. Dann schließen, schließen ,
dann ist das eine Vier.
Das ist eine Vier, ja. Das findest du auf iTU postu, das ich teilen
werde, dann bekomme ich Push. In Ordnung Okay, das haben wir also. Als Nächstes werden
wir uns
damit befassen oder das Szenario durcharbeiten,
das wir uns ansehen
, ist, dass sie sich
wahrscheinlich ein Geschäft oder
einen
Onlinedienst ansehen , der
ein Inventar hat, in dem Kunden
einkaufen können , und sobald sie
tatsächlich dort einkaufen, können sie
sofort ein anderes einrichten und versuchen, die Zahlung zu
ersetzen. Das Inventar
sollte also existieren. Also genau das wollen
wir hier tun. Wir wollen das Inventar tatsächlich vorab
auffüllen,
wir wollen das Inventar auffüllen Lassen Sie mich einfach ein paar
Dinge an den einzelnen Stellen ändern. Lassen Sie uns das Profil vorstellen. Lassen Sie uns ein Profil vorstellen. Das Profil ist aktiv. Lass uns einfach entwickeln, weil ich nicht gerne direkt an DBs arbeite. Hat keine Auswirkungen. Ich habe einfach das Gefühl, dass es den
Leuten hilft , mehr über
das Konzept von Streusel zu erfahren. Deshalb
führe ich diese Dinge bewusst ein. Es ist nicht so, als ob es
etwas Besonderes macht. Ich meine, wenn Sie
in einer Entwicklungsumgebung sind, habe ich einen Entwickler, in dem
Sie Produkte, Betrug, Betrug,
Betrug haben können, basierend auf
den Eigenschaften, die Sie definiert haben, Sie können separate
Konfigurationen oder Werte oder Werte der Konfiguration für
die Produktion verwenden, sodass ich dann die Dinge verkabeln kann Das sind wahrscheinlich Dinge, die Sie auch in den
Anwendungseigenschaften behalten
möchten Sonst, wahrscheinlich die
Datenbank behalten, sie einbinden. Oder Sie verwenden irgendeine Form von
Konfigurationseigenschaften , um Dinge anhand Ihrer
Anwendungseigenschaften abzubilden. Was auch immer funktioniert, Spring ist so dynamisch, Sie können verschiedene Dinge
tun Seat, du kannst etwas
auf verschiedene Arten tun, oder? In Ordnung,
also lasst uns das machen. Keiner der Orte hat Tiefe, also ist es Tiefe,
die läuft. In Ordnung. Also lasst uns einfach ein
paar Eigenschaften vorstellen. Stellen Sie einige wenige Eigenschaften vor. Also kopiere ich das rüber?
Ja. Also kopiere ich das, damit ich einfach alles hierher
verschieben kann. Also ich will ein Frühlings-, Frühling-JPA, dann Winterschlaf,
gelb Also, Sie sehen, das ist einzigartig. Jetzt platziere ich hier Updates. Das würde im Grunde
meine Entis durchgehen und
sie in die Datenbank drücken
, mit der Sie ziemlich
vertraut sind Dann
sollte bekannt sein, ob ich ein Produkt habe, ob ich Pro verwende Das ist bekannt oder es wurde
komplett entfernt, weil es
nicht aktualisiert werden sollte Was Sie wahrscheinlich tun möchten,
ist, dass
Sie, obwohl daran gearbeitet und
im Test enroma UAT getestet wurde, das Skript schreiben, gearbeitet und
im Test enroma UAT getestet wurde, das Skript schreiben, das
Skript kopieren, das Skript
nehmen und
loslegen, es Ihrem Skript geben und es Ihrem DBA-Team übergeben,
und das DBA-Team
führt Ihr Skript aus
und die Spring-Anwendung Spring-Anwendung Das ist die ideale Situation. So läuft
man oder geht in die Produktion. Sie verwenden keine Objekte
in der Produktion , weil dieser Typ
die Dinge sehr durcheinander bringen kann. Einer meiner Vorgesetzten, mit dem ich
zusammengearbeitet habe ,
als ich tatsächlich
in einer Firma gearbeitet habe, hat
das schon einmal gemacht, und tatsächlich ist es
nur ein Klickfall Ich hatte schon einmal jemanden
, der Skripte
verwendet und ich bin mir sicher, dass Sie
wissen, was das bewirken würde Das würde das
Schema zerstören. Es war chaotisch. Ich war wirklich chaotisch. Ich wollte es einfach dort platzieren, um die Dinge zu
trennen Ich führe jetzt ein Skript aus. Und das Skript ist also, SQL im Knit-Modus zu
verwenden. Das initialisiert also nur
deinen Script-Knit-Modus. Du willst es
immer zum ersten Mal platzieren. Dann nehmen wir es manchmal ab und platzieren es wie nie zuvor,
richtig? Was sonst? Ich denke, das sollte es sein.
Dann um das Drehbuch einzubringen. Also das ist, ich werde
alles zur Verfügung stellen. All dies wird
im Ressourcenbereich verfügbar sein. Ich werde das tatsächlich
kennzeichnen, damit wir tatsächlich darauf zugreifen
können. Also SQ Alles klar. Also werde ich
das Inventar laden. Das ist das Inventar.
Dieses Inventar. Denken Sie daran, was wir in unserem
Inventar haben, wenn ich
das einfach nebeneinander lege. Ich
lege es Seite an Seite. Du siehst das in der Beschreibung, dem Namen, der
Beschreibung, dem Preis. Der andere hier spielt keine Rolle. Ich füge das einfach ein, oder? Also genau
so sieht es aus. Also füge ich einfach ein
paar Daten hinein. Das ist es im Grunde. So richtig. Mal sehen, wie
sich das entwickelt. Ich glaube, ich bin fertig. Da ich die Drehbücher ausführe, sollte
das vielleicht sofort
abgespielt werden. Ich sollte die
Initialisierung verschieben. Das heißt, ich sollte zuerst
zulassen, dass die Tabellen
erstellt werden,
bevor versucht wird, die Skripte zu bewerten
oder auszuführen Das ist auch sehr wichtig. Definieren wir die Initialisierung, setzen
wir sie auf true. Dadurch können die Tabellen
erstellt werden und es wird angezeigt, alles in Ordnung ist,
bevor es dann
versucht , die Skripte auszuführen Ist meine Datenbank aktiv? Ja, es
sollte erscheinen, weil ich mein Docker
geöffnet
habe und wenn ich die Anwendung ausgeführt habe,
denken Sie daran, dass wir Docker
Compose besprochen haben , um reinzukommen
und es aufzurufen In Ordnung. Also, du kannst diesen Weg gehen, aber ich rechne zusammen, wenn ich das nicht
will , wenn wir das mal heruntergefahren haben, will
ich trotzdem die Daten
beobachten. Gehen wir also zur
Docker-Compose-Datei und lassen Sie uns das ansprechen Lassen Sie mich das einfach
ansprechen. Also, sobald Sie die
Anwendung tatsächlich ausführen oder herunterfahren, haben
wir keinen Fall, in dem sie hochkommt, sondern abstürzt. Nein, nein, das würde
physisch nicht passieren. Nein, ich lasse es laufen, sobald du
es von hier aus laufen lässt. Ordnung. Aber ja. Ich denke, ich möchte
für diejenigen, die
Intelligltimate nicht verwenden, bitte erwähnen , dass
Sie alle anderen Clients verwenden können, Sie alle anderen Clients verwenden können die Sie Zugriff haben, um dies tatsächlich
zu Du kannst PG Admin benutzen, oder? Das ist einfach praktisch
, weil sich alles an einem Ort befindet und ich Ihnen nicht zu viele
Tools auf den Bildschirm
bringen möchte . Deshalb versuche ich, die Anzahl
der Tools, die ich verwende, so
weit wie möglich zu begrenzen. Deshalb verwende ich
alle Funktionen von Intellig
, die alles direkt
aus dem Docker
Compose zeigen , dass ich den Docker-Dienst
gesehen habe, auf
den ich hier
Zugriff
haben kann , um die Logs anzusehen,
die wir beim Debuggen im
vorherigen Abschnitt verwendet haben, als wir tatsächlich auf einen Fehler gestoßen sind,
äh bei der Datenbankfunktion, die wir hier wirklich haben. Ich bin nicht die Datenbankfunktion. Wahrscheinlich habe ich es nicht beharrt. Lass uns einfach weitermachen und
das tun , weil es hier eine
Datenbankfunktion Ich habe es nicht erwähnt. Es gibt
eine Datenbankfunktion. Nennen wir das Modulate
Cosa dieses MLF Modulit Court. Sie können einfach eine Datenbankfunktion hinzufügen
. Ja, es ist mein lokaler Gastgeber. Der Benutzer, das ist der Benutzer hier. Der Benutzer ist ModulitPars ist Modults. Also ich weiß schon was es ist. Modult Module Lt. Ja, meine Datenbank ist das, was auf dieser gemeinsamen Quelle auf diesen Commodls basiert Ordnung, das funktioniert also.
Also lass es uns testen. Lass es uns testen. Ist verbunden. Lass uns sehen. Fantastisch.
Das verbindet sich also richtig. Also bewerben wir uns
dann einfach, okay. In Ordnung. Wir haben Module, es
scheint momentan keine Tabelle dazu zu geben. Deshalb führen wir das dann aus. Lass uns das ausführen. Ich gehe davon aus, dass das in
meine Inventartabelle übernommen wird. Jetzt sollten wir keinen RFC mehr sehen, würden das eigentlich retten, mal Siehst du, habe mein Profil
abgeholt Hier findest du mein Profil,
das ist Dev, richtig Mir ist aufgefallen, dass das Profil Dev ist. Erfolgreich gestartet. Lassen Sie uns das also aktualisieren. Wow. Wir haben Tische. JP hat mit der
Entität einige der Sequenzen beendet ,
die
wir tatsächlich hinzugefügt haben. Das ist interessiert. Das ist
interessiert. Gutes Zeug. Gutes Zeug. Gutes
Zeug. Alles klar. Gutes Zeug. Du fügst Sequenzen hinzu, erinnerst dich daran oder setzt sie gleich Die Sequenzen für jede Tabelle, nach
der gearbeitet werden soll. Das ist es, was die Identität ausmacht, das ist dieser Typ, seine Identität. Automatisch eine Sequenz platzieren
und diese wird verwendet. Sie fragen sich vielleicht, warum verwenden Sie
keine Sequenz? Ich empfehle dringend,
Sequence zu verwenden. Es gibt eine Sequenz. Der Sequenztyp, der
stark mit Sequenz übereinstimmt, dass Sie ihn
für die Oracle-Datenbank verwenden, richtig? Oracle-Datenbank, verwenden Sie
keine Identität. Stark, du kannst es nachlesen. Ich rate Ihnen dringend,
Sequence zu verwenden und Auto nicht zu verwenden. Auto ist nicht
okay, oder? Benutze Auto nicht. Was die Identität betrifft, funktioniert Identität
für praktisch alle Datenbanken, aber für alle relationalen Datenbanken Lassen Sie uns alle
relationalen Datenbanken verwenden Aber für Oracle verwenden
Sie bitte die Reihenfolge. Ordnung. Also ich denke, wir
hatten keine Fehler. Also lass uns das Inventar überprüfen. Fantastisch. Das
war also vorab bevölkert Das war vorbesiedelt. Das haben wir erfolgreich gemacht. Wir konnten die Daten vorab
auffüllen, wir haben die Tabellen erstellt Was ist also die Veröffentlichung von Veranstaltungen? Woher kam der Typ? Wir werden gleich dazu kommen, dazu kommen
wir gleich. Erläutern Sie, wo die Veröffentlichung von Veranstaltungen tatsächlich stattfindet.
Aber lass uns zurückgehen. Wir sehen das kommen.
Wir sehen das ausgehen. Wir sehen die Datenbank. Jetzt möchte ich das auf „nie“
ändern , weil wir von hier aus
nichts mehr tun werden. Wenn wir den Weg haben, den wir brauchen,
verkabeln wir ihn einfach auch, richtig? Verdrahten Sie das auch. Als ob wir im Testmodus sind,
also können wir einbrechen, wir können das reinbringen. Rollläden funktionieren
tatsächlich einwandfrei Ordnung. Also ein kurzer Überblick darüber,
was eine Veröffentlichung von Veranstaltungen ist Wenn Sie nun die
Dokumentation zum Spring-Modul I durchgehen, sollten
Module
normalerweise bei
Ereignissen miteinander kommunizieren normalerweise bei
Ereignissen miteinander , und Ereignisse können fehlschlagen. Ereignisse können fehlschlagen. Wenn sie fehlschlagen, hilft Ihnen
Spring Modulate,
Ihr Ereignis in dieser Tabelle zu speichern Wenn Sie diese Tabelle speichern,
können Sie zu dieser Tabelle zurückkehren, also wir initialisieren oder wir senden wahrscheinlich, dass Sie einen ausgefallenen
Dienst hatten oder aus irgendeinem Grund den Fehler beheben
möchten oder
vielleicht der Dienst,
der hochgefahren sein sollte, ausgefallen
ist, er ist jetzt aktiv.
Sie können es erneut versuchen, dies wird
tatsächlich durchgeführt Es gibt noch eine andere
Immobilie, die genutzt wird, aber ich glaube, ich bin nur
voreilig, entschuldigen Sie,
dass es hier noch eine andere Immobilie gibt Die Immobilie heißt Mood LiF. Ist es, nein, nein, es ist Mod Lif. Ich denke, wir veröffentlichen, wir veröffentlichen herausragende
Ereignisse und wir fangen an Ich denke, das sollte
grundsätzlich für den
Testmodus verwendet werden, weil Sie Dinge in der
Produktion starten können , oder? Nein, oder vielleicht, wenn
Sie gerade die Bereitstellung durchführen. Also würde ich das immer auf False
setzen wollen, oder? Ich möchte das einfach immer auf falsch
setzen. Das sollte also
überhaupt nicht passieren. Das sollte nicht passieren. Sie sehen also, der Standardwert ist wahr. Entschuldigung, der Standardwert
ist falsch. Die Bedeutung spielt also keine
Rolle, ob ich reinpasse. Es ist nicht wirklich
wichtig, ob ich etwas hinzufüge, also kann ich einfach
alles zusammenfügen. Ich will das nur zeigen.
Wir werden zu Veranstaltungen gehen. Wir werden zu Veranstaltungen kommen,
oder? Weil das das zentrale Transfermodell oder der Kommunikationsmodus
zwischen den Modellen ist, oder? Aber lassen Sie uns das vorerst von der positiven Seite
betrachten. Wir waren in der Lage, unsere Tabellen zu
erstellen, und wir können sie initialisieren und wir
können unsere Daten sehen, was ich ein bisschen
unter Ich denke, das funktioniert gezeigt Wir sollen unser Gemüse bevölkern. Ordnung. Danke, Leute.
Wir sehen uns im nächsten Video.
12. Integrationstest 1: Okay, Leute, vielen
Dank, dass ihr
mit mir zurückgekommen seid. In Ordnung. Also bevor wir weitermachen, lassen Sie uns schnell diesen Github hinzufügen. Ich habe gerade das Inventar gefüllt. Ich werde also
Nummer fünf schließen, oder? Also dann drücke ich und
das dient als Referenz. Also mach das einfach Schritt für Schritt. In
diesem speziellen Video möchte ich nun diesem speziellen Video der
Einrichtung der Basistests beginnen. Der Basistest würde benötigen oder erfordern, der Basistest würde für die Modelle erforderlich oder erforderlich
sein, wir müssen tatsächlich
den Basistest In diesem Sinne,
lass uns hier reinkommen, Inventar,
Bei Enter oder wie auch immer du willst, auf welche Art auch immer du weißt, ich benutze Tenter und um diesen Typen anzusprechen Dann will ich
keine der Methoden. Ich will das einfach machen. Dann richte es im Test ein. Also vor dem Test. Wenn du das machst,
ist es der Test. Jetzt, wo wir das Inventar haben, möchte ich es als Inventar
bezeichnen, nennen
wir es
Integrationstest, weil es mehr davon macht. Einfach Refraktor mit Namen
zur Inventarintegration. Integrationstests. Ein paar Personen haben mich
persönlich gefragt , was der Unterschied
zwischen Unit-Test, Funktionstest
und Integration ist. Das sind die drei, die
wir haben, oder? Das sind die Anrufe
, die wir haben. Unit-Test ist die kleinste Einheit, die kleinste Komponente von Tests, die Sie
tatsächlich durchführen können. Nehmen wir zum Beispiel,
wenn Sie dieses
Inventar-Repository
testen wollen, das Testen der einzelnen Teile. Wenn Sie mehrere Methoden haben, testen
Sie
jetzt jede einzelne, es geht darüber hinaus. Wenn Sie eine
Methode oder eine Logik geschrieben
haben, haben Sie eine Methode, eine Logik,
das Has und IL oder den Text num geschrieben. Sie müssen jeden einzelnen
Fall testen. Das ist Unit-Test. Es geht bis zur Liste und behandelt alle Anwendungsszenarien. Das ist Unit-Test. Funktionstests selbst, Funktionstests gehen ein
bisschen weiter. Komponententests sind relativ
schnell wie die schnellsten, aber Funktionstests
sind langsamer als Komponententests, weil
Funktionstests nicht
bedeuten, dass Sie Funktionen testen. Ich denke, die Leute
verwechseln das oft. Sie denken,
Funktionstest bedeutet, dass Sie Funktionen
testen,
was nicht stimmt Funktionstest ist
eigentlich ein Funktionstest. Sie können haben, ich bin mir sicher
, dass Sie eine bestimmte Methode
schreiben könnten . Sie versuchen, mit einer
bestimmten Methode etwas zu
erreichen und es in mehrere Funktionen
oder mehrere Methoden zu
unterteilen. Sie können
Funktionstests also als Funktion bezeichnen, nein. Vielmehr haben Sie eine
bestimmte Komponente im System,
die Sie testen
möchten, um zu
sehen, ob sie so funktioniert, wie
sie sollte, oder? Diese Komponenten können sich über
mehrere Codezeilen erstrecken ,
die unterschiedliche Funktionen haben. Testen Sie sie zusammen, sodass
Sie Funktionstests haben. Dann schnell
Integrationstest und durchgehend. Sie haben es von Ihrem Controller aus getroffen. Von Ihrem Controller geht es zu
Ihrem Service, von einem
Server zur Datenbank. Wenn Sie Dienste von
Drittanbietern haben Dienste von Drittanbietern
bezeichnet werden, kehrt
alles
zum Controller zurück. Ein End-to-End-Test
ist also ein Venture-Service. Ich hoffe, das ist klar. In Ordnung. Also für Integrationstests oder für
Tests in Spin-Modulaten
führt Spin Modulates eine Zuordnung ein, führt Spin Modulates eine Zuordnung ein als Anwendungsmodelltests bezeichnet wird Test von Anwendungsmodulen. Test des Anwendungsmoduls, bei dem es sich um einen Kunsttest im
Anwendungsmodus handelt. Also führen sie das ein. Also das wird standardmäßig
überprüfen, weil es aus diesem Paket
erstellt wurde. Es würde nach oben schauen, um
dieses Paket zu sehen und sicherzustellen
, dass dadurch
der Spring Modulate-Fluss oder
die festgelegten Regeln nicht unterbrochen werden, und sicherstellen, dass
Sie keine
Dinge hineininjizieren , die
nicht injiziert werden sollten Wenn Sie das tun, wird es scheitern. Ich denke, ein praktisches
Beispiel wird das sein. Lassen Sie uns hier also
etwas einfügen ,
damit ein Szenario ausgeführt wird. Also nenne ich
es einfach den Verifier. Vermeiden wir das Verifizierungsmodul. Modul, richtig? In Ordnung. Also, in diesem Sinne, lassen Sie uns
das anpacken und
schauen, was passiert. Also fangen wir an,
das Konzept zu verstehen. Also gut, wir lassen das laufen,
laufen laufen. Das ist gescheitert, warum ist es gescheitert? Ich kann eine Reihe von Gründen nennen warum ich glaube, dass es hätte
fehlschlagen sollen. Es
heißt, dass der Context-Loader nicht verfügbar
ist. Lass uns runter gehen. Datenquelle. Dies ist ein
Hauptgrund, warum es fehlschlägt. Denken Sie daran, dass wir die Datenquelle hier
verkabelt haben und weil wir die Datenquelle, die aus dem
Docker Compose stammt, weiß
dieser Typ nichts davon Dieser Typ weiß nichts davon. Was wir für den Test benötigen, weiß
nichts über den Docker
Compose, den Sie eingerichtet haben Was wir brauchen, um
eine Reihe von Dingen zu tun. Eine Reihe von Dingen, die wir
tatsächlich brauchen,
um das tatsächlich in die Tat umzusetzen. Lassen Sie uns zunächst zur Abhängigkeit
gehen. Gehen wir zur Abhängigkeit,
Docker Compose. Schauen wir uns unseren Docker Compose an. Nun, das ist korrekt, oder? Das ist richtig
, weil dieser Umfang auch berücksichtigt werden
würde,
wenn Sie
nach Runtime arbeiten, oder? Aber als Nächstes
müssen Sie sicherstellen, dass es sich tatsächlich um
eine Laufzeit handelt , denn denken Sie daran:
Spring denken Sie daran, dass M vn mehrere Bereiche
hat Manche sind auf Tests beschränkt, oder? Ich sage also, Runtime
sollte das sein, was Sie verwenden, dann würden Tests
das auch verhindern, oder? Erstes Bit. Dann lassen Sie uns als Nächstes unsere Datei erstellen. Lassen Sie uns eine
Ressourcenformel erstellen, um einen Tag mit Saucen zu gestalten. Nennen wir das Saucen. Ich denke, das sollte
direkt auf der Jala Jala sein. Mit Saucen. Was mache ich nochmal?
Nein, ist es nicht. Nein, ich nehme diese
Struktur wieder. Manchmal
verwechsle ich das. Ordnung. Okay, meine ich, richtig? Also dieses Java, diese Tests. Also Hauptgericht, es sollte unter diesem Typen unter diesem Typen sein. Also, wie heißt es. Diätetische Diät? Saucen, super. Fantastisch Danke. Danke.
In Ordnung, das haben wir. Dann
werden wir darin
eine spezielle
Anwendungs-Yarmo-Datei erstellen , die von unserem Testkontext verwendet
wird Dies kann auf verschiedene
Arten geschehen. Sie schreiben wahrscheinlich
eine Eigenschaftendatei und verwenden
dann eine
Testeigenschaftsquelle, um sie tatsächlich zu laden. Das funktioniert auch. Das
ist nur eine weitere Ausgabe. Also verwende ich hier nur einen
bestimmten Stil. Bitte beachten Sie also, dass Sie
verschiedene Stile verwenden können , damit
dies richtig funktioniert. Ich benutze die Anwendung oder Yarmo. Mama benutzt dort den Anwendungstest, aber wenn du
Application-Nip im Test benutzt, kann jetzt
Anwendungseigenschaften gestartet werden, dass
jetzt
Anwendungseigenschaften gestartet werden,
eine Testeigenschaftsquelle, damit
ich diese Datei einbinden kann Aber das sollte automatisch geladen werden. Nun, ich sage den Leuten das
so oft wie möglich Wenn Sie Spring Boats verwenden, halten Sie sich an die automatische Konfiguration. In dem Moment, in dem Sie versuchen, die Basiskonfiguration zu ändern, oder ich sollte das
aus zwei Gründen tun. Sollte ich eins sagen? Wenn du ein spezielles Bedürfnis hast , das die Spring
Auto-Konfiguration nicht bewältigen kann, versuche
aber immer zu wissen,
wie man Sachen kaputt macht. Nummer. Wenn
dies jedoch nicht der Fall ist, verwenden
Sie bitte die Basis, verwenden Sie
die automatische Konfiguration. Hören Sie auf, Eigenschaften hinzuzufügen, von denen
Sie denken, dass Sie möchten,
dass dies auf besondere Weise erfolgt. Was Sie tun,
ist,
den automatischen Konfigurationsablauf zu unterbrechen den automatischen Konfigurationsablauf ,
und das kann
dazu führen, dass Sie, wenn Sie mit Swing nicht wirklich
vertraut sind, dass
Sie notwendige
Fehler erstellen, deren Debugging
Stunden oder Tage dauern kann Debugging
Stunden oder Tage nur weil Sie
die automatische Konfiguration nicht verwendet Du weißt, dass es einen
deutlichen Unterschied zwischen Frühlings- und Frühlingsstiefeln gibt, oder? Wenn es nicht Frühling ist, musst
du
es irgendwie verkabeln , also wenn Frühlingsstiefel, diese sind
für dich automatisch verkabelt, oder? Denken Sie also bitte daran. Ordnung. Also dafür hätte
ich schon irgendwo
diesen Laienbär,
also gehe ich einfach durch, damit ich mich nicht verneige oder den Zehnten
zuführe Also das verwenden wir. Ich erinnere mich an Daten, das ist
Spring Spring, das ist Modul 3. Nun, es ist kein guter Fall Ihr Passwort preiszugeben, auch nicht in der Test-Cat,
denn das wird in den Waffenspeicher gehen.
Dieser Test läuft, damit Sie die Dinge nicht kaputt machen
wollen Wie gehst du damit um?
In Ordnung. Die gute Nachricht ist, dass
ich, wenn Sie Intelligen verwenden, in keiner Weise verkaufe Ich weiß, ich habe
viele Dinge über
Intelligen erwähnt , aber ich
verkaufe hier nicht Intelligen Ich sage nur, Intelligen ist einfach ein ziemlich
gutes Tool Was ich tun kann, ist, zur More Mall zu gehen und dann
die Konfiguration
auszuführen Dann in diesem Teil hier, alle Module im
Frühjahrsmodul kosten, dann möchte ich eine
Umgebungsvariable setzen. Ich möchte eine
Umgebungsvariable setzen. Zuerst ist mehr Dolt, dann unterstreicht man den Benutzernamen, dann sollte das auf Modulus gesetzt
werden dann unterstreicht man den Benutzernamen,
dann sollte das auf Modulus gesetzt
werden. Modul. Dann siehst du, ich kann es so ändern Dann das andere,
noch ein Doppelleben. Tut mir leid. Nutzername. Kein Benutzer-Bin. Nutzername. Dies
unterstreicht auch das PASSW-Modul Es bedeutet, dass die Konfiguration in diesem
System bedeutet. Niemand in der Walking-Action weiß genau, was passiert. Ich gebe dir eine Position, ich meine, weiß genau,
was passiert. Sobald du das tatsächlich
gespeichert hast In Ordnung, also haben wir das hinzugefügt. Ich glaube gesagt. Lass uns das nochmal machen. Wenn ich das richtig
hinzugefügt habe, sollte
das funktionieren. Wenn ich es nicht
richtig hinzugefügt habe, sollte es fehlschlagen. Das heißt, Sie sollten die Immobilie
nicht sehen. Lassen Sie uns das
noch einmal ausführen und sehen wie das funktioniert. Lass uns sehen. Ich habe das nicht erklärt
, also lassen wir
es einfach zu, dann erkläre ich,
was ich hier getan habe. Okay. Sehe ich nicht. Alles klar, siehst du, mein Test war bestanden. Was habe ich hier reingetan? Denken Sie daran, dass wir
Docker Compose verwenden. false gibt es eine Eigenschaft namens spring test false gibt es eine Eigenschaft namens spring
Docker Compose Skip heißt, ich möchte, dass Sie
dieselbe Eigenschaft verwenden , die Sie
meinen Docker Compose verwenden, oder Das heißt, Sie sollten
sich auf Kabel in mir selbst beschränken, und das sollte
tatsächlich funktionieren, oder? Also überspringst du es nicht
, damit es es benutzen kann. Man könnte sich also fragen, was ist
, wenn wir das deaktivieren? Sie können
es deaktivieren. Lass es uns zusammenbauen und sehen, ob es funktioniert, oder? Ernsthaft. Lass uns den Kerl kontrollieren. Lass uns das tun, weil wir eine
Behinderung haben, also lass uns sehen. Erlaubt das, ja, das tut es. Ich bin mir sicher, dass wir jetzt das
Wesentliche verstehen. Weil das jetzt verwendet, was wir in unserem Docker Compose
haben. Was sagen wir dazu als Nachteil? Wenn wir
zur Produktion übergehen und unseren
automatisierten Test ausführen möchten, wird
Docker Compose nicht gefunden Deshalb ist das wichtig. Lassen wir das einfach als Referenz stehen
. Ich habe dir gezeigt, dass das funktioniert
und das funktioniert auch, oder? Diese Arbeit funktioniert auch. Es sei denn, das funktioniert. Sagen wir,
funktioniert das. Also einfach beide verwenden, das sollte passen. Ich habe geschrieben, Sprink.
Das ist schon wieder Ron Lass uns sehen. Warum scheitern wir daran? Wir können feststellen, dass der sequestrierte Dienst nicht
erstellt werden kann, keine Daten erkannt werden können. Es wird derselbe
Fehler
erwartet, mit dem wir konfrontiert wurden, oder? Der Grund für diesen Fehler war,
dass wir uns daran erinnern, dass wir
hier nachgesehen haben , derselbe
Fehler, den wir hier hatten Ich denke, die Datenbank sagt, dass der
Benutzername nicht existiert. Es sucht nach einem Passwort. Passwort, das ist
das Feld dafür, also wird es nicht gefunden.
Es findet es nicht. Was ich tun kann, lassen Sie uns die
Konfiguration dieses Typen überprüfen. Eine Konfiguration für diesen Typen. J-Einheiten für die gesamte
J-Einheit. Also lass uns diesen Typen anschauen. Was
wir in meiner Umgebung sehen, fehlt. Die Umgebung fehlt. Für diesen Leitfaden
läuft alles im Frühling.
Moduli-Preis. Was habe ich bekommen? Mein Dif-Benutzername,
ModultPassword. Also sprechen sie. Die Rede geht zu meinem Eintrag. Mal sehen, wie das funktioniert. Mal sehen, wie das funktioniert.
Wenden Sie dieses Modul an. Modulname, Modul, lösche P SSA, W, richtig? In Ordnung, das ist also so gut. Der Name hat den Wert von Mt. Sie können es auch
in diesen Teilen finden. Also, es sollte Nets go geben. Das ist von den Systemen
aus dem System. Das ist in Ordnung, Modi. Mal sehen. In Ordnung, lassen wir die Lüftungsöffnung laufen. Welches renne ich? Oh,
tut mir leid. Was renne ich? Renne ich? Ich war
okay, das zu leiten. Bin ich für alles gerannt? Das würde definitiv fallen. L C. Okay. Ich konnte es ansprechen. Ordnung. Siehst du. In Ordnung. Lass mich das
Video schnell pausieren. Lass uns schnell gehen. Lassen Sie mich das debuggen,
damit wir nicht
endlos warten , um genau zu sagen,
was das Problem ist wenn wir es nicht verwenden, und ich werde in 8 Minuten zurückkommen Ordnung. Danke. In Ordnung,
Leute. Danke. Ich bin zurück. Also, ich habe die
Dokumentation durchgesehen und das sind die Teile, die ich
brauchte, um damit zu prahlen. Das
hatten wir also vorher. Also hatten wir es vorher. Wir haben nur den Kontext geladen, oder? Für die Basisanwendung müssen
Sie
das also tatsächlich an der Stelle platzieren, an der Sie den Namen der Klasse eingeben, die eine Spring-Boot-Oration
hat, dann klicken Sie, Sie verifizieren
es. Dann hat Spring Modulate
eine spezielle Anmerkung namens At application Module
test, die Sie verwenden müssen Wenn Sie nun in den
Anwendungsmodultest gehen, würden
Sie sehen, dass er den Springbo-Test
enthält Enthält den Springbo-Test
und enthält auch einige zusätzliche Details, die tatsächlich für
den Modultest verwendet werden Siehst du? Zum Beispiel das Modul testet die
automatische Konfiguration. Dies ist eine, die wir
physisch verwenden können. Es wird empfohlen,
dies zu verwenden, wenn wir tatsächlich Tests in
einem Spring-Modul
schreiben. Das Gleiche habe ich hier
gemacht. Nun, was macht es? In Ordnung. Dieses Video ist schon lang. Also werde ich im
nächsten Video zurückkommen, um einige der Details zu erklären.
Dann erstellen wir tatsächlich, wir erstellen tatsächlich die anderen Modultests.
In Ordnung, danke.
13. Integrationstest 2: Ordnung. Danke, dass ihr
mit mir zurückgekommen seid. Ordnung. Das ist Z hier. Ordnung, also haben wir
damit
angefangen , um den Testfall zu demonstrieren. Was sind die Kriterien, die
Sie tatsächlich für Dinge benötigen, die
Sie erfüllen müssen? Erstens: Wenn du dich bei
Yamo bewirbst , gibst du bitte
Yamo für deinen Test Ich bevorzuge eigentlich, dass wir
die automatische Konfiguration verwenden. Wenn wir das tun,
haben wir zwei Möglichkeiten. Wir können dies entweder auskommentieren,
um Docker Compose zu verwenden, dann überspringen wir den Test nicht, ich habe Spring
Docker Compose hier eingefügt, Spring Docker Compose, also sollte ich das
nicht
auskommentieren Spring Docker Compose,
bleib im Test falsch. Wenn wir das tun, verwenden wir
Eigenschaften in einem Docker-Compose. Das habe ich im letzten Video gezeigt. Wenn Sie
dies jedoch verwenden möchten, können Sie dies auch verwenden. Wir können die
Datenquelle auch direkt verwenden. Welches auch immer wir
bevorzugen, funktioniert also tatsächlich. Ich konnte das
im letzten Video ebenfalls
demonstrieren im letzten Video Also werde ich das vorerst einfach heben. Ich werde das vorerst einfach leben. Der nächste Schritt, den wir
ausführen müssen, ist dieser für unseren Bs-Modultest für
den Bs-Modultest, das ist der Test,
der das überprüft. Denken Sie daran, dass dies
anwendungsbasiert ist. Das ist modulbasiert. Das begünstigt dieses
Erfindungsmodell, dieses Paket. Das bevorzugt die Basis, es schaut auf die Dieser Test
betrachtet die Basis. Damit du das tatsächlich schreiben könntest, würdest
du sehen, dass du
so modellieren musst. Sie müssen die
Anwendungsmodule
dieser Klasse abrufen und dann überprüfen. Als Nächstes müssen
Sie die Konfiguration
verkabeln. Sie gehen zu mehr Fehler und
ändern die Konfiguration, wenn Sie dies in der
Umgebungsvariablen tun Denken Sie daran, dass ich hier die
Umgebungsvariable verwende. Diese Umgebung, wenn Sie
denken, dass das zu viel Arbeit ist, ich denke, das ist im Grunde zu
viel Arbeit, Sie können das im Grunde
einfach entfernen und den
Docker-Composing-Test verwenden, das würde nur die anderen Leute bevorzugen .
Der
Docker-Composing-Test funktioniert
einfach so wie Ich glaube, das ist klar.
Benutze das, du musst diesen Typen hinzufügen. Oder du bist es nicht, benutze diesen anderen Typ und das
sollte eigentlich funktionieren, du musst nicht ständig
die Umgebung hinzufügen , die diesen Typen
tauglich Sobald du das gemacht hast, möchte
ich dir
jetzt eine besondere Sache zeigen Lass uns diesen Test machen,
es sei denn, es ist etwas Cooles. Ordnung. Du
siehst also, das ist erledigt. Schauen Sie sich das jetzt bitte genau an. Okay, tut mir leid, das
ist noch nicht fertig. Was habe ich wieder falsch gemacht? Okay, das ist also, den Fehler sehen. Also kann ich es nicht verbinden. Oh, derselbe Fehler falsch,
es ist amüsant falsch. Also das ist, lass uns
einfach den Fehler überprüfen. Ich dachte, das wäre schon
behoben. MadldPassw. Hat das geführt. Ja, das ist behoben. Das ist schon behoben. Warum nimmt es es nicht
auf? Von diesem Typen. Lass uns sehen. Ich
vermassle wieder etwas. Oh, okay. Fantastisch. Fantastisch. Ich hole es von hier ab. Unterscheidet es
die. Das ist lustig Das unterscheidet den Test. Ich muss lieber von
oben weglaufen als von hier. Das ist mir nie aufgefallen. Du siehst Kass also anders. Also das ist eins, das ist ein anderes. Ich sehe diesen Wettbewerb verlieren. Ich muss auch die
Konfiguration dafür hinzufügen. Ich denke,
damit würde ich mich einfach an
diesen Typen halten. Ich muss mich nicht
jedes Mal mit der ganzen Konfiguration beschäftigen Es wird wirklich nervig. Lass uns wieder hierher kommen.
Lass uns das nochmal machen. Ich renne von
diesem Ort aus, ohne dass es keine
Umgebungsvariable hat. Also lass uns vor
diesem Kerl weglaufen. Okay. Also sieh zu, dass das funktioniert.
Fantastisch. Also das funktioniert. Also ich denke, das ist der Punkt. Also habe ich gerade herausgefunden, dass jeder von ihnen eine
andere Konfiguration hat. Das ist ziemlich lustig. Nun,
ich finde es in gewisser Weise cool, weil jeder von ihnen
möglicherweise unterschiedliche
Konfigurationen verwendet. Also könnten mehrere
unterschiedliche Konfigurationen haben. Also gut, das wollte
ich uns zeigen. Also schauen wir uns das an.
Schauen wir uns das an. Sie sehen also, dass
es einen logischen Namen gibt. So drückt es sich aus, ist in der Lage herauszufinden, wovor
Sie davonlaufen. Der logische Name ist, dieses Paket zu
überprüfen , es überprüft
natürlich
das Paket, das sich darin befindet. Deshalb konnte ich dieses Warenpaket
tatsächlich bekommen. Dann das Basispaket, es hat auch
das Basispaket identifiziert , von dem aus
Sie laufen. Sie überprüfen das bei den
direkten Modulen. Siehst du, es
gibt keine
Abhängigkeiten und weil es keine Abhängigkeiten gibt
, wird es deshalb ausgeführt. Wir kommen zu
dem Fall, dass wir
Dinge
von einem Modus zum anderen mit einem anderen Modul verbinden. Wir würden das auch untersuchen
und dann sehen wir den Unterschied. Wir werden sehen, dass Abhängigkeit tatsächlich
das Etikett de ist. Das einzige Wesen, das hier identifiziert
wird, ist dieser
Bewerbungskurs für den Frühjahrskurs. Ich hoffe, dass es klar ist. Wir können es uns leicht ansehen. Während ich den Test durchführe,
wenn Sie Fehler haben, erhalte ich
manchmal die Fehlermeldung, dass Sie Abhängigkeiten
haben, auf die
Sie nicht geachtet haben. Sie müssen überprüfen,
welche Abhängigkeiten es gibt. Sie können sie hier leicht finden. Ich glaube, ich
konnte das erklären. Bevor ich das
Video schnell beende, lass uns ihm schnell eine Nachricht schicken. Machen wir Inventar, tun wir, was ich sagen will, machen
wir Ordnung. Machen wir es der Ordnung halber. Lassen Sie uns also zur Ordnung
kommen, genauso. Also braucht es nur das Gleiche
, dass derselbe Typ wie dieser Kerl gebraucht wird. Also nur um es zu verifizieren, nur um das Modell
zu verifizieren, richtig? Das ist also ein
Anwendungsmodelltest. Ich würde sagen, ich bevorzuge Config, Invent
Configuration. Weil hier
alles enthalten sein muss. Lass uns das der Ordnung nach tun. Hier
ist das Inventar. Lass uns das auf Bestellung erledigen.
Wie kommt es, dass Liber schwören
sollte, dass das Genau so gut dafür. Ein Test Nennen wir es den
Ungleichungstest. gleiche Anwendungsmodul testet, dann testet es, nenne es fa Ordnung. Wenn das erledigt ist, starten
wir alles. Ich werde einfach isoliert
nach einer anderen Integration suchen, bevor wir dann zur anderen
übergehen und alles unterwegs ausführen. Aber ich muss die
Umgebungsvariable nicht mehr hinzufügen. Der Grund dafür ist, dass
ich den anderen mithilfe von
Bin hinzufüge, damit wir das sehen können. Sie sehen, das konnte die Mülleimer darin
finden. Siehst du? Das ist einfach
genial. Das ist genial. Es kann sehen, was
tatsächlich passiert. Ich wollte
Baseball ausfindig machen. Das Gleiche
wird dafür passieren. Aber lassen Sie uns einfach
alles auf einmal ausführen. Stellen wir sicher, dass
alles korrekt funktioniert. Ordnung. Also denk dran, wir benutzen das nicht mehr. Wenn wir das verwenden, werden wir
die
Umwelteigenschaften,
aber die Umgebungsvariablen herausinjizieren wollen die
Umwelteigenschaften,
aber die Umgebungsvariablen herausinjizieren aber Aber dafür können wir es einfach direkt verwenden , also
stellst du es einfach auf Aber wir gehen zur Produktion, anscheinend müssen wir das verwenden. Dann wahrscheinlich
in unserer Umgebung haben. Ich hoffe, Sie wissen, dass das Hinzufügen von Umgebungen
im Gange ist. Ich kann also zu meinen Fenstern gehen, zu meinen Fenstern gehen und eine Umgebung
schaffen. Sobald Sie eine Umgebung erstellt haben, startet
sie Intelligent und
wählt sie von Anfang an aus Dann sollten Sie sie tatsächlich laden können Ich muss das nicht im Speicher für Intelligen oder
die Umgebungsvariable Das ist eine andere Methode
,
Sie müssen nicht
mehr Konfiguration vornehmen Für diejenigen, die es nicht verwenden, möchte
ich keine
DA-Kombinationen verwenden und die Einstellung wie verwende ich die Umgebung
praktikabel? Es wählt also jeden Test Gehen Sie einfach zur
Umgebungsvariablen für die Variable entweder für
Ihr Linux oder Ihren MAC, dann gehen Sie zu der Option Ich denke
, sie sollte unter Profil oder oder Bash LC befinden, fügen Sie
dann diese
Umgebungsvariablen dort hinzu und zeigen Sie
dann das Hypersystem an, sodass sie tatsächlich beibehalten
werden, wenn Sie Ihr System
tatsächlich neu starten Wenn du dir das dann einmal angesehen hast, sollte
das genau funktionieren. Man kann Werke sehen. Das funktioniert. Ich habe die gesamte
Basisintegration
für diese vier in diesem Video erstellt für diese vier in diesem Video Fügen wir
einfach ein Problem hinzu. Ich füge nur ein Problem hinzu. Also bringe ich das einfach mit, füge
einfach ein Problem hinzu. Also nenne es einfach kreiertes
Bs-Inventar. Nein, nein, Bs. Hat Bs-Integration erstellt Ich habe
Integrationstest gesagt. Ordnung. Ich hoffe aber, dass ich es
für Zahlungen erstellt habe. Ich sage hier nicht Zahlungen. Wir sind nur ein
Kundenkredit für Zahlungen. Also machen wir das auch für Zahlungen. Also Zahlungen. Also Integration von
Zahlungen. Das Gleiche wie beim Test im
Anwendungsmodus Führen Sie dies
einfach sehr schnell aus und überprüfen Sie es
dann, da dieses
Video bereits sehr lang ist. Ich halte es gerne
am Ball, damit wir jederzeit abbrechen und
zurückkommen können. Ich lasse das nur noch einmal laufen.
Ich lasse das noch einmal laufen. Bitte sei sehr schnell. Ich möchte mein
Publikum warten lassen. In Ordnung, also lass uns hierher
gehen ist fertig. Das ist erledigt, das ist erledigt. Es ist erledigt. Lass mich
das einfach kopieren. Also bleib einfach sofort dran. Vielen Dank, mein Publikum, und wir konnten
erfolgreich weitermachen Ordnung. Die Integration und
alles funktioniert einwandfrei. Also lass uns das einfach schließen
. Schließ das. Ordnung. Dann heißt es Push Ordnung. Und die Gewohnheiten Du solltest
schließen. Automatisches Auto. Ordnung. Danke, Leute. Wir sehen uns im nächsten Video.
14. Integrationstest 3: Hallo, Leute. Danke, dass du
zu mir zurückgekommen bist. Das ist Z hier. In Ordnung. Lass uns Sachen kaputt machen.
Lass uns Sachen kaputt machen. Das ist die ganze
Essenz der Entwicklung. Wir sollten in der Lage sein, Dinge kaputt
zu machen. Denken Sie daran, dass wir das nicht
einmal injizieren können Lassen Sie uns das jetzt tun Lasst uns das in umgekehrter Reihenfolge veröffentlichen, ich will
euch nur zeigen, wie das funktioniert, oder? Lassen Sie uns einen weiteren Service einrichten , denn es ist gut, dass
Sie sehen, wie
die Dinge funktionieren, wenn Sie einen Fehler machen funktionieren, wenn Sie einen Fehler machen und Dinge
kaputt sind. Ich ziehe das aus. Ich nenne das
Service at Service. Dann bringen wir das Private mit rein. Nein, ich will das Inventar. Ich will das Inventar-Repository. Ich komme her. Letztliche Position,
Kentupost Verbinden wir es mit
Acquired Age Constructor. Das macht es also zu einem Finale, einfach zu einem Finale hier, oder? Überlege dir einfach eine dumme
Methode, oder? Besorgen Sie sich einfach eine Methode zum Verdummen. Nennen wir es einfach einen
öffentlichen Breaktest. Du willst nur
den Test bestehen. Den Test brechen. Wahrscheinlich nur gegen Webtest,
ich nenne einfach Inventar, Daten nennen einfach irgendwas. Nur Daten. Ich benutze es nicht
wirklich. Ich will nur
sehen, wie es ausgeht. Ich bin nur T-Daten. Das
würde nicht funktionieren, h.
Daten sind Spas,
belassen Sie es einfach dabei Ordnung. Gehen
wir auch damit in die andere Richtung. Lassen Sie uns das erledigen. Lass uns
sehen, was passiert. In Ordnung, schauen wir mal, was passiert. Okay, das kommt bald. Datenbank
wurde erfolgreich verbunden. Besteht es? Nein. Warum geht das durch? Richtig, der
Anwendungswettbewerb konnte nicht geladen werden. Siehst du? Fehler beim Erstellen dieses
Dienstes hmm Fehler beim Erstellen des anderen Dienstes Warum? Weil
unbefriedigte Abhängigkeit ein besonderer Konstruktor ist,
bla, bla, bla, bla, richtig? heißt, ich hätte
mindestens einen Strahl erwartet, der für die automatische Verkabelung in Frage kommt, oder? Also wenn du dir das ansiehst, ich habe das schon verkabelt, oder? Aber dieser Typ reicht im Grunde nur , weil er
das nicht erlaubt Erlaubt es nicht.
Das ist also eine gute Sache. Also, kein qualifizierender Strahl sagt
tatsächlich, dass erwartet wird, dass er
die Kandidaten für automatische Verkabelung qualifiziert , weil das nicht erlaubt ist Das ist der Punkt.
Das ist nicht erlaubt. Es wird Ihnen nicht erlauben
, weiter zu archivieren. Gehen wir
auch zur Basisklasse. Lass uns versuchen, das auszuführen. Dieser Typ leitet die
Basisklasse. Also lass uns das machen. Mal sehen, was auch passiert. Du solltest tatsächlich die meisten dieser Typen
reinladen und
mal sehen, was passiert. Weil er wegläuft, weil
dieser Typ isoliert rennt. Aber bei diesem Kerl sieht
man, dass es scheitert. Sie sehen also, dass alle unsere
Testfälle bestanden haben, bis
auf diesen, der fehlschlägt. Jeder von ihnen wird
einfach weiter kaputt gehen weil dieser Typ
kaputt geht und sagt:
Hey, ich kenne dich nicht. Ich kenne dich nicht. Für mich hast du
nichts als Isolation definiert. Wer bist du genau, und warum
sollte ich dir
erlauben, das durchzugehen?
Das ist also der Fall, oder? Das buchen wir, also gehe ich
zurück und verschiebe es. Also musste ich euch das zeigen,
damit ihr euch
bewusst seid , dass man Dinge nicht einfach
hineinschieben kann, oder? Man kann
Dinge nicht einfach hineinbringen. Sobald du es
eingezogen hast, könnte jemand sagen,
was ist, wenn ich hier reinkomme? Was ist, wenn ich in die
andere Integration komme, richtig? Ich habe die andere
Integration gemacht, so fühlt es sich an. Habe ich recht? Was ist das
Startfenster? Anderes Exegon Was ist, wenn ich den anderen Exegon mache?
Was ist, wenn ich einfach automatisch verdrahten würde? Ich sage, was ist, wenn ich
einfach Auto Wire als Auto Wire und dann nur
Auto Wire Service Anderer Service hier drin.
Ich sage, wahrscheinlich hier. Was wird passieren? Soll das
nicht funktionieren? Okay. Lass es uns
ausprobieren. Lass uns sehen. Weil es gut ist, Dinge kaputt
zu machen, damit wir eine gute Vorstellung
davon haben, wie die Dinge funktionieren, dann kommen wir zurück. Kannst du sehen, dass es immer noch fehlschlägt? Es schlägt immer noch fehl, weil es es nicht sieht,
es es nicht zulässt. Bei der Nummer sollte das funktionieren. Das sollte funktionieren. Aber jetzt geht
es kaputt, weil
das verspottet werden würde Das ist im Grunde genommen eine Injektion
, aber es funktioniert nicht. Das hat einen bestimmten Grund
, auf den wir später in diesem Kurs noch eingehen Ich würde es zeigen. Im Moment sollte
es nicht der andere sein,
aber ich musste den Stopp einlegen,
damit wir schnell verstehen,
wie das funktioniert. Es würde uns also eine gute
Idee geben, dass wir einfach Dinge auf modernen
Modulen
auswählen und sie
in ein Modell einfließen lassen können Dinge auf modernen
Modulen
auswählen und sie
in ein Modell einfließen lassen , denken wir,
das sollte okay sein Nein, das ist nicht okay. Sie müssen einige Regeln
befolgen,
wenn Sie
einen bestimmten Parameter oder einen bestimmten Wert in einen
anderen Dienst einfügen möchten einen bestimmten Parameter oder einen bestimmten Wert in einen anderen Dienst Das heißt im Grunde,
stellen wir sicher, dass wir eine Person testen, dann bringen wir dieses
Video zum Abschluss Dann würden wir
im nächsten Video tatsächlich auf weitere
coole Dinge eingehen. Berühre im
nächsten Video einige gute Sachen. Lass uns sehen. Zahlungen, gut. Inventar, gut. Dann die Basis, gut. Dann das andere Inventar, gut. Dann ist das gut.
Danke Leute. Wir sehen uns im nächsten Video.
15. Benannte Schnittstelle: Ordnung. Nochmals vielen Dank zu
mir gekommen sind. Das ist Z hier. Ja. Also, äh, was wir gerade tun, ist einen Service aus
dem Inventar einem anderen zugänglich zu machen. In Ordnung. Lass uns auf diese Weise
darüber nachdenken. Sie gehen tatsächlich in ein Geschäft, bewerten die Lagerbestände, wählen die Dinge aus
, die Sie kaufen möchten Sobald Sie das haben, ist
das offenbar Teil Ihrer Bestellung Alles wird im
Rahmen Ihrer Bestellung versandt. Wir versuchen
derzeit, das
Inventar anhand der Bestellung
tatsächlich zu bewerten. Denken Sie daran, was wir
versuchen, ist sicherzustellen,
dass jeder
einzelne dieser Typen
stationär ist ,
eher so, als ob sie tatsächlich in jedem Modell
eingesperrt sind. Es wird jedoch
Szenarien geben, in denen Sie
auf einen Dienst innerhalb eines
Dienstes zugreifen müssen . Also, wie machst du das? Im letzten Video habe ich Ihnen
per Integrationstest gezeigt , dass Sie Szenarien erhalten,
wenn
Sie den Service einfach einbinden, oder? Der Test schlägt fehl, was bedeutet, dass Sie sich nicht daran halten. Je nachdem, was erwartet wird,
passen
sich die Regeln, die im
Frühjahr festgelegt wurden, an. Was wir tun müssen, dafür müssen
Sie
jetzt auf eine bestimmte Art und Weise tun Es gibt zwei Arten der Belichtung, die Sie durchführen können. Grundsätzlich
gibt es drei Arten Sie können ein
ganzes Paket verfügbar machen. Sie können ein Unterpaket verfügbar machen. Es gibt verschiedene Möglichkeiten. Dann können Sie das offenlegen, Sie können
auch offenlegen Sie können auch ein Paket oder einen Modus
haben
, der für alle offen ist. Also diese drei Typen. Der
erste Typ, über den wir sprechen werden, ist also eine benannte
Schnittstelle. Das ist das Wort. Es heißt benanntes Interface. Lassen Sie uns also schnell
einsteigen und wir werden sehen wie sich das genau entwickeln wird. Ich erkläre ein bisschen
, damit wir einen Hintergrund haben. Kann ich also direkt in den Code einsteigen und sehen, wie sich das entwickeln wird. Ordnung, also um
das viel mehr zu machen , damit wir das ins Rampenlicht rücken
können, würde
ich ein Unterpaket
namens exposed erstellen, oder? Ich nenne das Expose, oder? Also das ist nur zu
Demonstrationszwecken, wir werden genau sehen,
wann wir sehen, oh, was aufgedeckt wurde, oh, das ist der Leitfaden, dem ich ausgesetzt
wurde, oder? Darin würde ich dann die Schnittstelle
erstellen
, die wir veröffentlichen würden. Ich rufe diesen
Inventarservice an. Der Inventarservice
wird aufdecken. Das
werden wir also aufdecken, oder? Ich werde das offenlegen, aber ich würde
die Implementierung nicht offenlegen Würde nur diesen Dienst verfügbar machen, diese Schnittstelle an sich, und genau das würden wir tun Das werden wir im
Grunde tun. Was ist also mit
der Implementierung? In Ordnung. damit zunächst Lassen Sie uns damit zunächst die Signatur
kennzeichnen. Also hätten wir etwas
namens Lass uns die Inventur machen. Inventar DTO, ich bin mir sicher, dass Sie
wissen, dass ich das
Inventar selbst nicht veröffentlichen
möchte Inventory DTO würde das in einer Minute
erstellen. Also hol es. Holen wir das Inventar. Inventar nach Namen. Nach Namen, genau so haben wir es drin,
wie ist der Name jetzt
im Repository. Wir verwenden den Namen zum Abrufen. Dann haben wir auch eine
Liste der Inventar-DTO. Da ich
das offenlege, möchte
ich
keine Kernimplementierung
meiner Inventarklasse offenlegen meiner Inventarklasse Dies wird Fetch
Fetch All im Namen sein. Das alles dem Namen nach. Dies würde eine Liste mit Zeichenketten
nehmen und sie
dann
Inventarname Inventarnamen nennen. Das wäre im Grunde das,
weil ich das offenlege.
Ich sollte dieses Bild erstellen, Ich sollte dieses Bild erstellen weil es verfügbar sein
sollte, auch weil wenn Sie eine DTU haben, die nicht
exponiert ist und Sie
versuchen, innerhalb des Dienstes aufzurufen,
das Spring-Modell sich auch beschweren
würde Das muss innerhalb
dessen liegen, was ich offenlegen möchte. Ich versuche es auch verfügbar zu machen,
also muss ich dieses DTO erstellen. Ordnung. Nehmen
wir an, dieses DTO sollte im Grunde
genau die gleichen Felder enthalten , die es tatsächlich enthält Teilen wir das nach rechts
auf. Lass uns das auswählen, nur um Zeit zu sparen. Wählen Sie das aus und wir
entfernen einfach, was wir nicht benötigen. Nimm das einfach raus.
Wir brauchen den Ausweis. Wir brauchen einen Namen. Das funktioniert. Sie könnten wahrscheinlich darüber
nachdenken, es zu verwenden. Sie können tatsächlich
darüber nachdenken, Bam Mapper zu verwenden. Sie könnten auch
darüber nachdenken, eine Karte zu verwenden, die getroffen wurde. Es gibt mehrere Tools
, die Sie grundsätzlich verwenden können. Jedes dieser Tools hat
tatsächlich einen
kleinen Overhead. Ich, wenn Sie ein großes haben, bitte
so viel Sie können, benutzen
Sie
es bitte. Da das
relativ klein ist, möchte
ich es manuell machen. Lassen Sie mich hier einfach unsere
Daten verwenden. Ein Datum. Lumbxh erledigt die
Arbeit einfach für mich. Nimm die anderen Standardcodes
. Mein Interface hat jetzt das. Lassen Sie uns nun die Code-Implementierung vornehmen. Die Implementierung
befindet sich im
Inventarmodul selbst Ich möchte die
Implementierung nicht offenlegen. Ich möchte
nur die Schnittstelle allein verfügbar machen. Ich habe das Inventar. Dann lass mich
einfach mir selbst helfen. Ruft an. Eingabe vom Inventarservice. Inventarservice-Eingabe dann
würde ich die
Schnittstelle implementieren, oder? Dann sollte es einsatzbereit sein. Dann verkable ich ein
Kabel mit Sub-Jungs. Ich verwende require x constructor
, um die Verkabelung vorzunehmen. Dann lass uns das implementieren. Okay, also kann ich das schließen. Jetzt werde ich das
private Inventure-Repository aufrufen. Danke. Automatisch vervollständigen.
Wir haben das Dann können wir physisch eine TO-Klasse
erstellen, oder? Lass uns ein Inventar
TO haben. Inventar bis Lassen Sie uns ein
Inventar-Util haben, das
tatsächlich dazu verwendet wird,
das Inventar dem Inventar TO
zuzuordnen das Inventar dem Inventar TO
zuzuordnen Es gibt eine Co-Klasse. Es ist eine Co-Annotation von
Lumber Code at Utility. In der Utility-Klasse wird sichergestellt, dass
es sich um
eine endgültige Klasse handelt und jede Methode, die Sie
innerhalb dieser Klasse erstellen, eine statische Methode
ist Im Grunde funktioniert es für uns.
Es ist eine sehr tolle Sache. Also, was machen wir als Nächstes?
Wir werden konvertieren. Wir haben ein öffentliches Inventar, wir konvertieren von Inventar
zu Inventar , damit
Restaurants Sie inventarisieren Nennen wir es Karte. Nennen wir es Karte.
Nennen wir es. Die Karte ist in Ordnung. Ja, nehmen wir das. Wir haben Inventar DTO. Wir machen es
lustiger. Machen wir es lustiger.
Machen wir daraus einen Baumeister. Machen wir das DTO, Builder. Ja, das funktioniert Sie können dann
keinen X-Konstruktor, überhaupt keinen Ax-Konstruktor,
N-Builder Sie benötigen immer einen Builder, die haben
Sie tatsächlich auch. Ich glaube, das war 118, eine bestimmte
Version des Logbuches. Ich weiß nicht, ob
das nicht mehr
erforderlich ist . Es schadet uns nicht. Wir haben diesen Baumeister. Damit kann ich bauen. Damit kann ich einfach
direkt zurückkehren. Ich kehre einfach zurück. Dann das Inventar DTU DT
the Builder oder Build, richtig? Das funktioniert also für uns. Wir können also sofort sehen, welche Inhalte
im Inventar enthalten sind. In Ordnung, also lass uns
das nach rechts spielen. Also können wir sehen, womit
wir arbeiten. Ja. Also brauchen wir den Ausweis. Brauchen Sie den Ausweis. Fantastisch.
Würde ich den Namen brauchen? Fantastisch. Würde
die Beschreibung benötigen. Fantastisch. Ich bräuchte den Preis. Dann irgendwann den Preis bekommen. Das funktioniert schon für uns. Wenn Sie feststellen, dass ich
dort keine statische Methode
platziert habe , sehen Sie, wie dieser spezielle
Begriff im Grunde funktioniert. Wenn du hier reinkommst, können
wir das Depot machen Dots sortiert das Inventar nach Namen. Wir verstehen den Namen.
Wir werfen tatsächlich ein optionales, dann machen wir eine
Karte. Wir machen eine Karte Wir machen eine Karte, dann können Sie sehen, dass das eine
optionale Option zurückgibt, dann machen wir eine Karte. Die Karte, dann
nehme ich das Inventar, dann übergebe ich es an Ich nenne das Inventar Inventar T ja, damit du es sehen kannst, weil ich Methodenreferenz verwende weil automatisch
statische Methode. Also das funktioniert für mich. Dann wird return
weniger zu einer Ausnahme, else oder true, weil wir
die Ausnahme später
für
viele Dinge verwenden werden die Ausnahme später
für
viele Dinge weil Sie
tatsächlich über den offenen Modus sprechen möchten tatsächlich über den offenen Modus sprechen ohne tatsächlich ins Spiel zu kommen. Das funktioniert tatsächlich. Das Gleiche gilt für das, wir
werden
das Gleiche mit dieser Zeit
machen das Gleiche mit dieser Zeit werde es durchschauen,
das wird dasselbe tun. Erfinde, ein Repositorium zu haben. Sie haben das
Inventar-Repository, in das die Namen eingegeben werden, dann gebe ich die
Inventarnamen weiter. Übergabe der Inventarnamen. Jetzt habe ich eine Inventarliste. Dann streame ich tatsächlich durch. Ich streame durch, dann mache ich eine Karte, eine Karte und fülle
tatsächlich eine
der ersten Daten und ich gebe eine der
ersten Daten ein.
Also gut, Leute, ich
glaube, wir haben tatsächlich eine
USA, um den Kerl auszuziehen. Also gut, Leute, ich
glaube, wir haben tatsächlich eine
USA, um den Kerl auszuziehen Ich führe auch die Inventur durch. Ich kartografiere das auch.
Ich kann mir das aussuchen. Ich ordne es einfach
anhand der Referenz zu. Nachdem wir es zugeordnet haben, nehmen
wir es auf die Liste auf. Das ist, glaube ich, ein
Java 17-Feature, also ich denke, wir
sammeln Fotos und sammeln dann eine Liste. In Ordnung, also wir haben das. Wir haben das darin, dann haben wir unsere Implementierung. Das ist unsere Implementierung
innerhalb dieses Typen. Ich kann dann entscheiden, dass ich diesen Typen
nicht bloßstelle, also kann ich ihn abnehmen,
oder? Ich kann es ausziehen. Ich möchte nicht, dass irgendwo darauf
zugegriffen wird. Ich bin mir sicher, dass wir genau sehen,
wie sich das entwickelt, oder? Wir schränken tatsächlich
die Barrierefreiheit ein, Moment haben wir das DTO, jetzt haben wir den Service, wir
haben tatsächlich
die Implementierung Die nächste Frage stellt sich dann, wie wir es aufdecken Um ein Unterpaket verfügbar zu machen. Ich weiß, ich hätte
eigentlich erklären sollen ,
wie man das Paket
für ein SF-Paket verfügbar macht, aber aufgrund unserer Implementierung
habe ich keine Wahl. Ich denke, wir werden zuerst
das Unterpaket verfügbar machen. Wir fangen jetzt an, über
wahrscheinliche Implementierungen zu sprechen. Entschuldigung, die Ausnahmen, dann
zeige ich Ihnen, wie man
ein ganzes Paket verfügbar macht, und wir kommen auch zu diesem Teil, ich werde es Ihnen
tatsächlich zeigen. Okay. Also, wie machen wir das?
Wir werden also ein
Paket erstellen, das Informationen enthält. Wir haben also ein Paket
, das eine Informationsdatei ist. Das Paket, das
dann infofile ist, würden wir dann
eine Anzeige im Spring Framework aufrufen , dann modulif und dann Das ist es mit dem Namen Interface.
Was möchtest du enthüllen? Der Name des
Pakets, das Sie
verfügbar machen möchten, heißt exponiert. Also gehe ich wieder nach rechts, G, Spring Framework,
Modul Name Interface Wie lautet dann der
Name des Pakets? Das ist der Name des Pakets. Denken Sie daran, das ist nur
für Unterpakete, oder? Wenn Sie
ein Unterpaket verfügbar machen möchten und nicht ein
ganzes Paket oder Modul, wie Sie es nennen, sondern
dies ist ein Untermodell Da wir also wissen, ist unser Modell ein Paket- und Paketmodell. Wenn Sie also
das Untermodell verfügbar machen möchten, verwenden Sie dieses. Wenn Sie
etwas anderes offenlegen möchten, möchten Sie
wahrscheinlich das gesamte Paket
offenlegen.
Es gibt einen anderen
Weg, dies zu Dann werden Sie ein
sogenanntes
Anwendungsmodell verwenden , oder? Da werden wir also hinkommen. Also das wirst
du enthüllen. Nun stellt sich die Frage,
wenn Sie das offenlegen, müssen
Sie das andere Modul darüber informieren , dass Sie
Informationen aus diesem Inventar erhalten werden Informationen aus diesem Es muss also wissen , dass es
Informationen von diesem empfängt Als Ergebnis
haben wir hier auch eine Paketinformationsdatei, eine Paketinformation, dann
würden wir das auch sagen:
Hey, du wirst ein Modul
erhalten. Mit einem Unterpaket das. Das
entspricht auch einer Organisation,
dem Spring Framework, Moduleaf, aber dieses
Mal einem Anwendungsmodul Denken Sie daran, dass ich beim
letzten Mal im
Anwendungsmodul gesagt habe, wenn Sie sehen
wollen, was
in einem Parameter enthalten ist , nur
ein Steuerelement P. Sehen Sie, Control P zeigt
Ihnen die Details Das ist eine intelligente Flosse. Sie können sehen, dass wir Abhängigkeiten
zugelassen haben. Genau das suchen wir nach erlaubten Abhängigkeiten. Wir machen erlaubte Abhängigkeiten
und denken daran, denn wenn wir uns das noch
einmal ansehen, ist
Abhängigkeit ein Array, also würde ich das eigentlich so
platzieren. Dann sagen wir, erwarten
Sie bitte Informationen aus dem Inventarmodul, dem
Unterpaket, das offengelegt wird. Ich hoffe, das ist klar.
Ich werde es nochmal durchgehen. Um tatsächlich Abhängigkeiten aufnehmen zu können, müssen
wir ein
Paket definieren, dessen Informationen sich
weit innerhalb des anderen Moduls befinden. Dann verwenden wir eine Grafik
mit dieser Anmerkung, nämlich das Anwendungsmodell, aber das ist die Eingabe im
Anwendungsmodul des G Spring Framework-Moduls. Dann definieren wir die
zulässige Abhängigkeit das Inventarmodell, das
Unterpaket, das ich offenlege. Denken Sie daran, dass dies ein Unterpaket ist. Nehmen wir an, ein Unterpaket. Können wir es jetzt, wo wir
das getan haben, ausprobieren? Mal sehen, ob du
etwas kaputt gemacht hast. Das Wichtigste zuerst. Lassen Sie uns einen Dummy O-Dienst erstellen, den DummIO-Service für
Südaustralien. Ich erstelle immer wieder
diesen anderen Dienst und
streiche ihn von der Liste, weil ich nicht
genau weiß, wie er ist, also möchte ich ihn noch nicht
wirklich nutzen Lassen Sie uns diesen
Service einfach als Service kennzeichnen und den Typen verkabeln Also Kabel verkabeln, ich benutze zumindest den
Artikel als Konstrukt privat, fertig, dann Inventar Service. Inventarservice. Sie sehen,
das ist kein Jammern. Im Gegensatz zum letzten Mal, bei dem alles rot angezeigt
wurde, weil die Modifikatoren
der Modifikator*****
sind, entfernen wir vorerst die Öffentlichkeit
, aber das ist
tatsächlich vorerst die Öffentlichkeit
, aber das ist Das beschwert sich auch. Lass es uns herausfinden. Lass es uns herausfinden. Also was wir tun, wir lassen das einfach laufen. Lass uns einen Test machen. So lässt sich das bestätigen. Das funktioniert, wir sollten
keine Fehlermeldung bekommen. Alles sollte
immer noch so funktionieren wie es ist. Wenn dies jedoch tatsächlich einen
Fehler ausgewählt hat, sollten wir im Grunde sehen, warum der
Fehler auftritt. Ich gehe davon aus, dass beim
Bestell- oder
Integrationstest ein Fehler auftritt ,
da wir dort die Dinge tatsächlich
verkabeln. Sie sehen, dass die Dinge im Gange sind, lassen Sie uns das Inventar überprüfen. Das hat einen Fehler gewählt,
das hat einen Fehler gewählt. Mal sehen, was der Fehler ist? Was ist hier die Fehlerquelle?
Was ist die Fehlerquelle? Welche Fehlerquelle?
Es steht so. wurde kein Behälter dieses Typs gefunden, konnte keine
Stückliste gefunden werden,
was bedeutet, dass die
Nutzung des Es wurde kein Behälter dieses Typs gefunden, es
konnte keine
Stückliste gefunden werden,
was bedeutet, dass die
Nutzung des Inventarservices nicht unterstützt wird. Ich dachte, es könnte
den Mülleimer finden , weil er darin
eigentlich nicht verfügbar ist. Das ist nicht verfügbar. Hat das nicht verfügbar. Was wir tun, bringen wir den Kerl an diesen Ort. Lass uns das sehen. Lassen Sie uns diesen Typen umgestalten, lassen Sie uns das nochmal überprüfen, weil
ich hier alles aufgedeckt habe, auf der Suche nach dem Mülleimer.
Lassen Sie uns das noch einmal ausführen Ich werde hier reinkommen und das
um das herum regeln. Was ist das Oh, jetzt siehst du, wir haben
es großartig gemacht. Jetzt bringt es hier
alles durcheinander, oder? Also lass uns das Inventar verschieben. Es behauptet, hey, du willst ein Inventar, aber ich kann es nicht sehen. Anstatt das zu verschieben, kann
ich es wahrscheinlich als öffentlich bezeichnen
, oder? Das sollte eigentlich öffentlich
sein. Aber wenn Sie das als öffentlich bezeichnen, ist
das Problem, wenn Sie es als öffentlich kennzeichnen ,
würde es entlarvt werden. Ich versuche zu verhindern, dass
es aufgedeckt wird. Im Moment
ist es also nicht so, dass ich es sehe. Das
sucht nach dem Inventar. Das kann jetzt diesen Typen
ausfindig machen, denn denken Sie daran, das
ist immer noch öffentlich Also lass uns das nochmal machen.
Lassen Sie uns das noch einmal ausführen. Es sucht nach einer Bene, die nach einer Bene
sucht. Lassen wir also den Strahl
reinkommen. Lass uns das sehen. Okay, ich denke, ich sollte
das andere Event einfach alleine
durchführen , um keine Zeit zu verschwenden Aber okay, lass das einfach sein. Okay, ich habe es
durchgemacht habe es
durchgemacht,
ich habe es durchgemacht. Kannst du den Ben finden? Nein. Warum kannst du
den Strahl nicht finden? Lass uns sehen. Sehen wir uns den Fehler noch einmal an.
Sehen wir uns den Fehler an? Der Wettbewerb konnte nicht geladen werden
, weil richtig. Ordnung. Okay. Ja, das
sollte scheitern. Das sollte scheitern. Ordnung. Das
soll im Grunde scheitern, weil das uns im Grunde zum nächsten Schritt
führen würde , oder? Auch wenn wir
Dinge hierher verschieben, können
wir immer noch scheitern und sagen:
Oh, das funktioniert nicht, oder? Welches ist der knifflige
Teil. Im nächsten Video werde
ich genau zeigen,
wie das funktioniert, oder? Das war nur der Teil
, denn so würde ein Entwickler natürlich denken, wenn er hier reingeht. Also das wirklich zum
Laufen bringen und sagen, wenn ich das tatsächlich
hinzufüge, dann wird
der Mülleimer gefunden, aber
das ist nicht wirklich der Fall. Wenn Sie den Test ausführen, müssen
Sie sicherstellen, dass Sie
jedem der Tests mitteilen, dass hey, hier kommt
auch eine Abhängigkeit rein. Weil es eine Abhängigkeit gibt. nur das Modul angeben, müssen
Sie dem
Testmodulpfad auch mitteilen, dass
eine Abhängigkeit besteht , damit Module oder das Muttermodul eingegeben werden können, damit der Test ausgeführt werden kann. Mehr davon im nächsten
Video. Danke Leute.
16. Benannte Schnittstelle 2: In Ordnung, danke, dass ihr wieder
zu mir gekommen seid. Letztes Mal sind wir auf
etwas kniffliges gestoßen ,
weil wir die Schnittstelle hier
eingefügt oder gesagt haben, wir hoffen, dass
das funktioniert. Aber wir sind tatsächlich
auf ein Problem gestoßen. Also habe ich alles, was
hier definiert ist, verschoben und in das
exponierte Paket gelegt, weil wir dachten, das sollte funktionieren oder das
exponierte Unterpaket, das würde funktionieren, aber es ist
immer noch fehlgeschlagen, oder? Es ist immer noch gescheitert.
Der knifflige Teil ist jedoch nur dieser, alles was Sie jetzt tun müssen, der Punkt ist, dass der
Test läuft. Der Test wird nur
gegen das alleine laufen. Alles andere würde scheitern. Das ist in der
Regel ein Teil des Hinterns innerhalb des Federmoduls Lassen Sie dies Abhängigkeiten annehmen, Sie müssen jetzt einen
Parameter namens mode verwenden Modus. Modus, dann startest du
direkte Abhängigkeiten Dabei handelt es sich um direkte Abhängigkeiten,
oder Sie verwenden alle Abhängigkeiten, um Abhängigkeiten
zuzulassen, die Sie wahrscheinlich später in der Zukunft
hinzufügen werden Sie würden sehen, wo
dies auch
fehlschlagen würde , weil es
einige Teile gibt , die eigentlich
nicht erlaubt Lassen Sie uns
jedoch
direkte Abhängigkeiten verwenden. Wenn du das auswählst,
lass uns das einfach
direkt ausführen und schauen, was passiert. Lass uns den
Kerl einfach direkt ansteuern. Ich lasse das einfach direkt laufen. Das hat bisher versagt. Lass uns sehen. Schlägt das fehl? Denken Sie daran, dass wir alle
Details hierher verschoben haben. Schlägt das fehl? Eigentlich wird es
nicht scheitern. In Ordnung. Also sehen wir, dass das
tatsächlich vorbei ist, oder? Also führe ich uns irgendwie durch, wie ein Entwickler wahrscheinlich an das Ping-Modell
herangehen möchte. Bitte, Sie müssen tatsächlich Denkweise
ändern,
dass
Sie
Dinge einfach von Paketen
zu Paketen oder Modell
zu Submodeling verschieben können ,
das würde tatsächlich versuchen, die Regeln zu
befolgen, weil das genau das
erweitert, was damit eigentlich abgedeckt werden
soll Gehen wir jetzt auch hier rein. Gehen wir hier rein. Lassen Sie uns das auswählen und lassen Sie uns es auch ausführen. Das ist
auch schon früher gescheitert. Mal sehen, was passieren würde? Das würde im Grunde genommen den
Frühlingskontext regeln, alles. Denken Sie daran, das beinhaltet tatsächlich den Springbok-Test, oder? In Ordnung, du siehst,
dass das auch bestanden wurde. Also lassen Sie uns den
gesamten Test durchführen, richtig? Richtig. Wir sehen also, dass wir
keine Regel gebrochen haben. Denken Sie daran, dass wir uns schrittweise
entwickeln. Bei jedem Schritt, den wir entwickeln, führen
wir den Test durch, um sicherzustellen , dass wir nicht gegen die Regeln verstoßen haben. Wir brechen die Regeln, wir sehen
im Grunde das Problem darin,
dass wir dies
und das getan haben und das getan haben. Ordnung. Siehst du
alles vorübergehen? Lassen Sie mich Ihnen jetzt
etwas Interessantes zeigen. Erinnern Sie sich daran, dass ich
Ihnen vorhin gezeigt habe wir
dieses Basispaket beobachteten, können Sie sehen, dass wir jetzt direkte modale Abhängigkeiten haben ,
was letztendlich der Fall ist. Vorher hatten wir keine, KEINE, aber jetzt haben wir eine Erfindung weil wir sie tatsächlich in das Paket
aufgenommen haben und wir haben
es tatsächlich beide in die Nutzung des Pakets aufgenommen , das Informationen enthält, um
die Schnittstelle als
benannte Schnittstelle verfügbar zu machen, was für ein Unterpaket ist. Dann haben wir es so verkabelt, dass es
die Schnittstelle
im anderen Modell zulässt . In unserem Test haben wir dann der Testnotation
gesagt:
Hey, lassen Sie zu, dass auch die direkten
Abhängigkeiten eingebunden werden. Und genau das
ist passiert. Alles klar? Also damit, wenn Sie diesen Service
nicht benötigen, können
Sie den Service einbinden, aber das ist momentan nicht das
Ziel. Sie zeigen, dass das tatsächlich
bestanden hat, sodass wir dann
sehen können , wie das
genau funktioniert. In Ordnung. Also könnte mir auch
jemand eine Frage stellen. Was wäre, wenn du dieses Paket
verschoben hast,
heißt das, dass du
nur ein
kniffliger Trick für dich warst, die Kaution für
die
Implementierung des Inventars hierher zu überweisen ? Oh ja, ich musste tatsächlich zeigen, dass Sie das nicht
unbedingt müssen. Alles, was wir hier veröffentlichen mussten waren die Inventardetails
und der Inventarservice. Lassen Sie uns das zurückstellen. Also haben wir es
jetzt zurückverschoben. Das ist das einzige
, was wir enthüllen. Lass uns unseren Test machen. Lassen Sie uns einfach
den gesamten Test ausführen und sehen, ob das noch funktioniert?
Das wird kaputt gehen. Wenn es nicht funktioniert, wir ihn
nicht finden können, wir keinen Strahl finden, der nach Ella
gefragt hat, sollte
das kaputt gehen. Diese beiden Teile sollten
kaputt gehen. Aber geht es kaputt? Lass es uns herausfinden. Ordnung, der Test
zur Zahlungsintegration wird gerade durchgeführt.
Nun, das hat funktioniert. Integrationstest, eventuelle
Integration hier, die Basis hat funktioniert, andere
Event-Integrationen und andere Integrationen Sie sehen, das funktioniert
tatsächlich gut. ich gerade
tun konnte, ist, dass wir
im Moment nur das enthüllen, was aufgedeckt werden
muss, oder? Nur was aufgedeckt werden muss. Dies steht nun im Gegensatz zu
der Art und Weise, wie einige einen
Dienst entwickelt haben
könnten , bei dem Sie dem anderen Modell
jetzt erlauben, alles
zu wissen, so wie das andere Modell alles
weiß, sich im Inventarmodell befindet. Aber dieses Mal stellen
wir hier
nur das Unterpaket zur Das ist es, wovon wir wollen, dass das
andere Modell Bescheid weiß. Wenn Sie jetzt hierher kommen,
sehen Sie, dass Sie
genau das wissen. Wenn Sie tatsächlich
eine Domin-Methode erstellen, nennen wir das
jetzt einfach
Public Order, das ist in Ordnung Lass uns einfach Ordnung schaffen. Wir können dann Inventory Dots aufrufen, dann etwas holen und wir erhalten
trotzdem die Details, die
wir benötigen, ohne dass sich die
Anwendung beschwert Ich hoffe, das ist klar. In Ordnung. Jetzt konnten wir die andere Schnittstelle
verkabeln. Damit würde ich den Kerl wieder
löschen. Ich werde auf jeden Fall veröffentlichen,
wenn dieses Video richtig geschnitten ist, ich werde diesen Typen wieder löschen. Wir haben
das geschafft. Jetzt können wir
erklären und zeigen, wie
die genannte Schnittstelle funktioniert. Ich werde der Klarheit
halber noch einmal gehen. Die benannte Schnittstelle wird verwendet
, um ein Unterpaket verfügbar zu machen. Wird verwendet, um ein Unterpaket verfügbar zu machen, und wie machen wir das, um das G-Interface mit
dem Modnamen interface zu verwenden ,
den Namen des Unterpakets innerhalb
des Unterpaketnamens den Namen des Unterpakets innerhalb innerhalb
der Punktinformation des Pakets Dann die Zielklasse,
das ist dieser Teil, dann muss der
Zielklasse mitgeteilt werden welche Abhängigkeit Sie erwarten
sollten oder wo Sie
Daten oder Wesen erwarten sollten und welches dann das
Inventar ist, das dann verfügbar gemacht Inventar.
Unterpaket Colm Column, verfügbar. Danke, dass du zu mir gekommen bist. Wir sehen uns
dann im
nächsten Video. Danke.
17. Bestellservice 0: Ordnung. Danke
, dass du zu mir gekommen bist. Wir haben
die Namensoberfläche angesprochen. Jetzt habe ich noch einmal darüber nachgedacht. Ich verwende Java 21. Warum verwende ich Data und Umbok? Warum
verwende ich nicht einfach Aufzeichnungen, oder? Ich glaube, das
sollte das Beste sein. Lass uns Platten machen.
Lassen Sie uns einfach darauf eingehen. Lassen Sie uns das in Aufzeichnungen ändern. Aufzeichnungen
gehen also tatsächlich in diese Richtung, Rekord. Rekord, ich brauche
keinen von diesen Typen. Dann wird jeder dieser Typen
nicht privat sein, weil es als
Parameter rein geht, dann nehme ich das raus. Ich verwende nur die
Schemata des Geheimdienstes. Ich mache Strg R oder
ändere das Semiklm ein Komma und ersetze dann O. Wenn ich das habe,
dann würde daraus
tatsächlich Open This Up werden Schließe das und öffne dann
das. In Ordnung. Also ja, also so wird die Platte im Grunde
aussehen. So wird ein Rekord aussehen? Also ordne ich es einfach richtig an. So wird die
Aufzeichnung im Grunde aussehen. Kann es also wahrscheinlich irgendwie
lesbarer machen. Ordnung. Ich denke,
das war gut. Ja. Sieht gut aus. Schauen wir mal. Ich finde, es sieht immer noch ziemlich schrecklich aus.
Gar nicht gut. Ordnung. Also kann ich mir das
hier aussuchen Also gut, ja, ja,
ja, das sieht besser aus. Es sieht besser aus. Also ziehe ich das
einfach aus. Also gut, das sieht
besser aus. Lass uns das reparieren. Reparieren wir das im Event u T. Da ist
kein Buda mehr drin. Warum ist es früher ein Buda? Weil wir das wollten,
aber jetzt in Java 21 ist? Lassen Sie uns einfach die
Vorzüge von Java 21 erkunden, oder? Was würde einfach
funktionieren? Wir erstellen einfach Eventu DTO Inventory DTO, das dem neuen Inventar
DTO entspricht Dies nimmt die ID IDC,
IDS-Inventar oder Get ID, dann Inventar, um den Namen zu erhalten, Inventar, um eine Beschreibung zu erhalten, dann
Inventar, um den dann Ich ziehe das einfach aus. Ich kehre einfach
direkt hierher zurück, kehre zurück. Wir drehen uns um, das sollte es sein. Das ist also die Anpassung. Stimmt. Also das macht mehr Sinn. Gehen wir jetzt nach innen. Das
ändert sich nicht, ändert sich nicht. Ich bin einfach weg von der Verwendung eines UMBxJV und verwende tatsächlich Richtig. Also das ist gut. Das ist gut. Das
soll eine statische Methode sein. Sobald du das gebaut hast, sobald
du es jetzt gebaut hast, überprüfe
ich deine Zielklasse, du würdest immer noch sehen, dass das heißt lass uns das einfach bauen, damit du einfach Projekte erstellen
kannst. Es ist riesig. In Ordnung, schauen wir
in den Klassen nach. C, dann Inventar, dieser Typ. Wie du siehst, ist es
eine Abschlussklasse, oder? Es ist eine letzte Klasse,
und sie ist statisch. Das ist es also, was die
Utility-Klasse tut. Ich wollte uns
das nur zeigen, und es
erstellt automatisch einen privaten Konstruktor , den wir nicht instanziieren
sollen. ****. Großartig. Jetzt haben wir das. Jetzt wird der Service länger erwartet
. Ja. Oder der Service. Der ganze Service. Ich glaube, lassen Sie uns einfach ein bisschen
durchhalten. Lass uns das vorher in Git speichern
, richtig. Speichern wir das,
damit wir nachverfolgen können , wo wir
die Änderungen vorgenommen haben, richtig? Speichern wir diese also in Gits. Also gehe ich einfach zu Gates. Ich gehe einfach zu Gates. Ich mache das auf
meinem zweiten Bildschirm, damit ich es hierher bringen kann. Dann lass uns zu Ich
gehe zu meinem Repost gehen. Oh, tut mir leid, Leute, ich lasse mich das
reinbringen. Lass mich das machen. Das sind also die monatlichen Kosten. Im Fall des Moduls
gehen wir dann zu den entstandenen Problemen über. Lassen Sie uns ein Problem erstellen. Sehen wir uns die benannte Schnittstelle an. Lassen Sie mich Ihnen hier nur ein
paar Kommentare geben, die sagen wie man Submodu entlarvt Ich glaube, ich erinnere mich,
lass uns nur ein Etikett nennen. Das ist eine Verbesserung, oder? Lassen Sie uns es als Verbesserung bezeichnen. Ja, lassen Sie uns
unsere erste Ausgabe erzählen. Wie dem auch sei, lass es uns einfach als Verbesserung
bezeichnen. Also erstellen wir einfach das,
wählen wir das aus, lassen Sie uns nach innen gehen. Such dir den Typen aus, den er begeht. Dann CM, dann schließt es. Dann schieben wir das einfach
raus, nennen das Scannen,
Scannen, wann immer ich Git benutze
Guardians Push In Ordnung Also das ist gut. Lassen Sie uns das überprüfen, was ich gesagt habe. Ja, das wurde gespeichert. Ich kann diesen
aber anderen Bildschirm bewegen? Ja. In Ordnung. Also lasst uns jetzt in den anderen Dienst springen. Der Service wird jedoch eine
gewisse Koimplementierung erfordern. Deshalb bin ich davor
weggelaufen,
aber ja, hier sind wir. Anderer Service? Ja, wie lange müssen wir es anderen
Servicediensten sagen,
dann war dafür
X Constructor erforderlich Dann denk dran, ich kann
meinen privaten
Endinventarservice, den Inventarservice,
hinzuziehen meinen privaten
Endinventarservice , den Inventarservice,
hinzuziehen Vielleicht kann ich das jetzt machen
und ich habe dir gezeigt, wie. Ordnung. Das ist großartig. Jetzt müssen wir den Kerl einbinden. Würden wir Methode brauchen. Nennen wir es einfach Create
Order oder Make Order. Entweder es einfach aufzurufen würde es ermöglichen,
dass es tatsächlich zurückkehrt. Lass es uns trotzdem geben. Wir geben etwas zurück, das
als Bestellung DTO bezeichnet wird. Anderes DTO. Dann schaffen Sie Ordnung, wir nehmen auch das andere DTO Wir wissen nicht, was dann, Jaspe. Bitte gib mir
keine weiteren Vorschläge. Wir erstellen das andere DTO. Das wird im
DTO-Paket dieses Typen von OO sein. Lassen Sie uns ein
Paket namens DTL erstellen. Lassen Sie uns diesen Typen auswählen. Lassen Sie uns es in O DTO erstellen. Es ist eine Klasse. Ja. Das wäre ein Java-Record. Das wäre ein Java-Record. Das wird ein Rekord sein,
da Sie den
Datensatz bereits verwenden , lassen Sie uns einfach bei der Verwendung von Datensätzen bleiben
, oder? Was würde das also beinhalten? Dies wird private Inhalte beinhalten. tut mir leid. Ich dachte, ich
verwende die Zahlenklasse, verwende eine Zeichenfolge, den Kundennamen und andere enthalten den Namen
des Kunden oder
sollten die meisten enthalten. Dann eine
Kunden-E-Mail an den Kunden, dann sollten Sie
auch Inventar enthalten,
das Inventar , das
sie ausgewählt haben das Inventar, das sie von der Benutzeroberfläche
ausgewählt haben, Sie denken darüber nach, Sie sollten eine Liste mit Erfindungen
enthalten. Aber dieses Mal haben wir nicht
das
Inventar
offengelegt, sondern Details zum Inventar, sondern die Steuern
auf das, was wir hier verwenden. Dies ist nicht dasselbe
Inventardetail. Das ist es, was wir tatsächlich von der Benutzeroberfläche
bekommen. Dieses Inventardetail
hier drüben, in wir nur
den Namen und die Menge enthalten. Weil wir nur sehen
wollen, wie das Inventar heißt und
wie das T. Also sollten wir es
wohl so nennen als ob ich ihm
immer noch
etwas geben möchte, das mit dem Inventar zu tun hat. Ich möchte
es wahrscheinlich INV DTO nennen, oder? ICH NVT Ich möchte
es nicht mit Inventure DTO verwechseln, weil ich es eigentlich nicht sein möchte Nennen wir es also einfach Inventory RequestTo. Das ergibt Sinn.
Ja. Nennen wir es Inventar Request DTO Das macht Sinn, oder? Inventar, Anfrage. Detail. Es unterscheidet sich von den
Inventardetails, die wir verwenden. Ich werde dir sagen, dass du
von der
Inventareinheit zu den Inventardetails übergehst Nennen wir es einfach
Inventar DTO, sie nennen es einfach
Inventar-Questliste Das ist in Ordnung. Ich
denke, das ist in Ordnung. Ich habe kein Problem
damit, oder? Also das ist vorerst gut.
Das ist vorerst gut. Ich möchte auch zusätzliche Details hinzufügen
. Ich möchte einige zusätzliche
Details hinzufügen, die verwendet werden. Ich bin einfach faul,
ich bin einfach faul. Ich möchte einfach nur zurückkehren
wollen, okay. Weißt du was? Lass uns einfach
die Arbeit machen. Lass uns die Arbeit machen. Lass uns die Arbeit machen. Ich
möchte auch eine Antwort zurückgeben. Nennen wir diese Antwort auf die Bestellung oder Antwort als Antwort DTO Response DTO, dann sollte das im Grunde ein Datensatz sein, sollte
auch ein Datensatz sein Dann sollte dieser tatsächlich die Nachricht
enthalten, die Nachricht, die Sie
zurücksenden sollte nur die Verwendung von Teja enthalten, sagen wir Statuscode, Code Ich weiß nicht, warum
ich Wrapper verwende. Dann denke ich, können wir das vorerst
lassen. Wir können das lassen und dann später wiederkommen
, um es zu verbessern.
Ich wähle das aus. Ich lasse das hier einfach weg, dann sollte es
sein. Ich komme her. Also bestellen wir DTO, bestellen DTO. Dann lassen Sie uns diesen Fehler beheben. Hier liegt also ein Fehler vor. Lass uns das vorerst einfach
nicht wissen.
Wir wissen es nicht. Dann lass uns herkommen
und diesen Fehler beheben. Wir haben das nicht geschaffen
. Das wird das
schaffen. Das ist ein Rekord. In Ordnung. Also, was würde das beinhalten? Es enthält im Grunde nur die Namenszeichenfolge, die Zeichenfolge, den
Inventarnamen. Name der Erfindung, dann wird
das
die Menge in int enthalten , richtig? Stimmt. Das ist es. Das ist es, was es enthalten wird. Ja, das ist es. Ja.
Ich denke, es ist in Ordnung. Sieht hässlich aus. Ich mag es. Das sieht besser aus.
Dann können wir den Kerl einbinden. Er hat die Liste bereits angemeldet. Jetzt lächeln alle obwohl bei uns
nichts mehr kaputt geht. Ich könnte den
Test jetzt tatsächlich durchführen, aber das sollten wir nicht. Lassen Sie uns etwas
Sinnvolleres tun, bevor wir den Test tatsächlich durchführen. Nun, was ich tun möchte, ich werde hier
wahrscheinlich einfach
etwas Pudo-Code aufteilen Nur ein bisschen Pudo-Code. Ich möchte die
Einträge nach Namen, nach Namen,
Inventare
nach Namen abrufen Inventare
nach Namen Was möchte ich tun?
Was möchte ich tun? Ich habe Einträge nach Namen bekommen. Dann möchte ich Build bauen und das andere beibehalten, nennen
wir es einfach
Perist , das, was ich sage
Build. Lassen Sie uns einfach das andere beibehalten das andere beibehalten Was möchte ich sonst noch tun?
Dann möchte ich das O aufbauen und weiterführen. Dann denke ich, das
sollte vorerst in Ordnung sein Lassen Sie uns das Schritt für Schritt angehen. Lassen Sie uns das Schritt für Schritt angehen, oder? Gehen wir das Schritt für Schritt an. Ordnung. Also lass uns das machen. Wie viele Minuten
dauert das jetzt? Das sind 12 Minuten.
Wow. In Ordnung. Ich glaube, ich möchte
das Video hier posten , damit
wir zurückkommen können. Wir kommen wieder und würden tatsächlich anfangen,
das zu bauen. In Ordnung. Danke.
18. Bestellservice 1: Okay. In Ordnung, Leute. Wir sind wieder hier. Wir haben
wieder einmal hier aufgehört. Lass uns schnell gleich reinspringen. Um
dieses Video nicht zu lang zu machen. WG-Inventar, wir würden eigentlich bauen und die Reihenfolge beibehalten Ich denke, wir bauen auch das
Auftragsinventar auf und speichern Merken Sie sich dieses Inventar. Denken Sie daran, wir wissen, dass es in JPA ist.
Wir brauchten etwas, das
uns den Zusammenhang zwischen dem Inventar
und der Bestellung selbst aufzeigt Inventare, die tatsächlich als
Bestellung aufgegeben wurden. Dies gibt uns tatsächlich
die Verbindung zwischen ihnen. Fangen wir damit an. Fangen wir an.
Fangen wir mit der rechten Seite an. Fangen wir an, ja, wie
gehen wir vor? Hier steht schon
der Name. Das beinhaltet diesen
Kerl, diesen Kerl. Enthält den Namen
auf der Menge. So können wir
zunächst die Namen ermitteln. Denken Sie daran, dass wir die Namen brauchen. Holen wir uns also die Namen. Der andere Service,
er holt die raus. Das tue ich auch, um auf die Liste zu gehen. Lass uns TR streamen,
lass uns map. Dann haben Sie
Inventar, Name und Referenz aufgelistet, dann Liste zu Liste. Also ja, ich glaube, ich
nenne diese Inventare einfach Namen. Inventarnamen. Also, das funktioniert. Also, jetzt haben
wir das verstanden. Jetzt suchen wir das Inventar. Also ich denke, ich sollte es untertreiben
und Inventare machen. Das sind Inventare. Also
jetzt holen wir uns Inventare, wir haben das schon, rufen
einfach den
Inventarservice dot fetch all in name auf und
übergeben den Invent dran, dass Zach eine
Liste mit Zeichenketten platziert,
was genau
das ist, was wir
hier übergeben haben und das sollte hier übergeben haben und Das wird zurückkehren, sollte die Inventare
zurückgeben. Ich nenne diesen Typen nicht einfach
Inventare. Inventare Das ist gutes
Zeug, gutes Zeug. Im nächsten Schritt
bauen wir die Bestellung auf. Lass uns die, die
andere Erfindung bauen. Ich denke, wir sollten zuerst die
Bestellung bekommen, dann den Schlüssel, die Schlüssel oder die Primärschlüssel, die wir dann verwenden, um tatsächlich eine
Verbindung herzustellen. Lass uns das holen. Wie
gehen wir also vor? Wie gehen wir vor? Ja. Also würden wir im Grunde einfach bauen
wollen, im Grunde wollen
wir das einfach machen. Ich denke, ich möchte das
in einer separaten Methode machen. Lass uns das machen, lass uns
diese Bestellung als eine einzige Bestellung bezeichnen. Nennen wir es Modus und beharren wir auf
Reihenfolge. Ich denke, das funktioniert Dann nehmen wir DTO. Lass uns. Lassen Sie mich uns etwas Platz geben, damit wir das tatsächlich tun
können. Wir haben keine Ordnung, wir haben den anderen und dann den anderen
Ausscheidungsraum oder die ID dieser Sets, nein, wir müssen das nicht mit diesem Roto-Generator
machen, mit diesem To-Generator Oder eine Kennung, weil
wir eine Kennung wollen, nicht den primären Knoten oder andere Kennung, die
wir beim letzten Mal erstellt haben, irgendeinen anderen Kundennamen Jede andere Kunden-E-Mail. All diese Sets werden nicht gesetzt. Kunden-E-Mail einrichten.
Was dann noch? Ich glaube, wir haben den Status oder. Anderer Status. Wir hatten einen Status, ja, ja, einen festgelegten Status. Das wäre ein Status
, der abgeschlossen ist. Also ein Status
, der abgeschlossen ist. Denken Sie daran, es wurde
tatsächlich gestartet. Schau es dir an. Siehst du, es ist geöffnet, also
mach es fertig. Wir müssen das nicht einstellen,
da es tatsächlich
sofort für uns erstellt würde sofort für uns erstellt Okay, also wo sind wir? lass uns das andere Detail wählen. Das andere Detail, das andere
DTO hat den Kundennamen, habe den Kundennamen, das
andere Detail, das ich nicht
wusste, habe es leider eingegeben Danke fürs Ausfüllen. Dann wollen wir einfach
das andere Repository zurückgeben. Wir brauchen das andere Repository,
dann archivieren wir es einfach. Das heißt, wir müssen
das andere Repo einbinden. Anderes Repost, nennen
wir es Dann wurde der andere Repost gespeichert. Habe ich schon. Fantastisch. Das haben wir schon. Das funktioniert jetzt schon. Was verwenden
wir als das? Verwenden wir eine, verwenden wir eine UID, eine UID, um das zu identifizieren Ich werde hier einfach
die endgültige UID erstellen. Die letzte Zeichenfolge oder der
Bezeichner lösen UUID, UID-Punkt, zufällige
UID bis Lass uns das hier reinstellen. Besser noch.
Sparen wir einfach ein bisschen Speicher. Ich mache das einfach hier
und das funktioniert. Sag, dass wir das sehen können. Sobald Sie das haben, sobald wir das, das andere DTO, tatsächlich gebaut
und beibehalten haben, können
wir
das im Grunde
automatisch beibehalten, können
wir
das im Grunde
automatisch beibehalten weil
das im Grunde das ist, was wir für das benötigen Aber wenn Sie
diese ID wieder hier sehen, ist das,
was wir
hier platzieren, nicht unsere Verknüpfung mit dem
anderen Inventar.
Ich kann das dann
hier aufrufen, um zu sagen: Okay,
beharren Sie auf dem Kerl, bestellen Sie das TO Dies enthält jetzt eine ID, die im Grunde nur verwendet wird,
wenn Persistenz aktiviert Lass uns dir wahrscheinlich ein Protokoll geben. Ich würde es vorziehen
, das SLL für J zu verwenden, SLL für J, hier auf das
Protokoll drücken und Log-Info sagen Schauen wir uns einfach an, ob das erstellt wurde. Ich glaube, das gefällt mir. Dann
wollen wir aufbauen und weitermachen. Bauen. Dann
wollen wir aufbauen und weitermachen. Lassen Sie uns sehen, dass Private
ungültig sein sollte , weil ich nicht glaube, dass wir zurückkehren müssen.
Wir werden es herausfinden. Dann bauen und
weitermachen oder inventarisieren. Nenn es oder Inventar. Ich nenne das einfach. Wird
es eins oder mehrere sein? Wir werden raus. Lassen Sie uns
das Inventar erst einmal machen. Das beinhaltet dann
eine Reihe von Dingen. Dies nimmt den O
DTO-Text im OTO O DTO auf. Nur Text im
anderen DTO würde auch benötigen, damit ich die Inventare weitergeben
werde Es sollte also Inventar DTO sein, wobei Inventar
DTO verwendet wird. Wo ist es nochmal? Oh,
das sind Inventardetails. Inventare, das wird
im Grunde die Liste
der Inventar-DTO sein Liste
der Inventar-DTO Wir benötigen eine Liste mit
Inventardetails für diese Inventar-DTOs Inventare, in Ordnung. Das ist in Ordnung , weil wir wissen, dass es das Inventar
enthält Du wolltest es einfach nicht
preisgeben. Dann würde ich auch
eine Zeichenfolge oder einen Bezeichner erhalten. Und dann das Feuer, was
dann noch? Dann der Betrag, richtig? Der Betrag. Wir werden sehen, wofür
dieser Betrag verwendet wird, oder? Wir werden sehen
, wofür es verwendet wird. Lassen Sie uns eine Liste verwenden. Ich zeige
Ihnen, wie Sie es verwenden können. Am Ende des Tages brauchst du
wahrscheinlich eine atomare Lunge, oder? Ich muss. Atomare Lungenmengen.
Lange Menge. Ordnung. Also, wie soll
das laufen? Zuallererst
möchte ich definieren, was die Liste der
Erfindungen ist, die
tatsächlich hartnäckig sind. Event anordnen, Rache anordnen. Ada erfinde Chi, Ada erfinde Chi, Avent Cheese, ich denke, ich sollte das in On Cheese
umbenennen Ja, Odin-Käse. Dann haben wir eine neue Arraylist,
Arey-Liste, von der wir
zeigen, dass die Größe
genau der Denken Sie daran, dass jeder von ihnen einzeln
persistiert werden würde, oder? Weil wir also
einzeln darauf bestanden haben, können wir einfach die Größe auswählen Wir sind uns also sicher,
was die Größe angeht. Also will ich nicht, dass es
einfach auf unbestimmte Zeit geht. Also die Größe des
Arrays, das wir beenden wollen. Dann suche ich die Inventare aus. Dann Inventare für jeden, wie kommt es, dass dieser Typ
nur meine Gedanken liest? Hey, bist du okay? Automatisch vervollständigen? Bitte lies
nicht meine Gedanken Dann erstelle ich ein neues
Bestellinventar. Ich habe kein
anderes Inventar. Dann ein neues Inventar oder
Inventar. Dann suche ich mir die Sünde aus. Würde ich
eine Mehrfachschleife machen? Ich versuche,
die Mehrfachschleife bereitzustellen. Ich denke, das würde
funktionieren. Lassen Sie uns jetzt einen weiteren
privaten Staat erstellen Nennen wir
es einfach Inventar DTU. Inventar lässt mich
dreifach nachdenken . Lassen Sie mich drei Bits
nachdenken. T Bits, String Wahr,
String Wahr, Lass
uns, Lassing Tu. Sting stimmt. Ich versuche
, über dich nachzudenken. Lassen Sie mich das ein bisschen unterbrechen, ein bisschen
darüber nachdenken. Ich gehe zurück. Ich kann meine Gedanken sammeln. Wir benötigen das angeforderte
Inventar. Jetzt wird alles
zusammenkommen. Dann rufen wir es auf und erhalten detaillierte Angaben zu
Inventaranfragen nach Namen. Ich denke, das funktioniert. Dann mache
ich einen Tippfehler, dann ist das eine Zeichenfolge,
dann der Inventarname Dann geben wir die Liste des angeforderten
Inventars weiter. Wir haben Inventar angefordert, das wir haben InventryRRequest-Liste. Nein, nein, nein, nein, nein, ich
will das nicht verwechseln Nennen wir es Inventar, DTO-Liste. Es ist ein Konflikt
mit dem anderen, den wir da drüben haben. In Ordnung. Also, was wir dann
tun würden Das
wäre nur eine Liste mit Inventaranfragen. Nein, ich mache das nicht für jeden, und ich streame durch ich streame durch,
dann filtere ich. Ich filtere
jeden von ihnen, um zu sehen, ob der Name des
Inventars diesem Inventarnamen
entspricht, oder? Ich möchte sichergehen können,
dass ich
das genaue Inventar
aus dieser Liste auswähle , oder? Denken Sie also daran, dass dadurch
eine Liste von Inventaren zurückgegeben wird , um die Inventardetails zu
verwenden Wir drehen die Liste der
Inventare nicht nach Namen oder
Vergangenheit Im Moment
versuche ich herauszufinden, ob das Inventar diese Daten hier
anfordert,
dieser Name, den Sie uns gegeben haben, mit
den Teilen übereinstimmt Wenn er mit
einer der Erfindungen übereinstimmt, die
uns gegeben wurden,
wissen wir, um welchen einer der Erfindungen übereinstimmt, die
uns gegeben wurden,
wissen wir, um Betrag wir
tatsächlich gebeten haben. Ich denke, ich sollte
das langsamer überdenken , weil jemand verwirrt sein
könnte. In Ordnung, also denke ich so
darüber nach. Du gibst eine Bestellung auf, oder? Während Sie also eine Bestellung aufgeben, hätte
die Benutzeroberfläche einige Details
ausgewählt, Sie hätten
einige Inventare ausgewählt Sie
müssen uns im Grunde nur
den Namen und die Menge der Menge,
die Sie auswählen, schicken den Namen und die Menge der Menge,
die Sie auswählen, Ich kann den Namen verwenden
, um herauszufinden, welches Inventar im Grunde
ein Startname ist, dann kann ich die Mengen
diesem bestimmten
Inventarbestand
in der Inventartabelle
zuordnen diesem bestimmten
Inventarbestand . Das ist genau das, was
ich hier mache. Ich versuche, den
Namen, der
als Bestellung übergeben wurde, zu verwenden , um tatsächlich eine Bestellung zu
erstellen. Ich versuche jetzt,
diese Liste durchzusehen, durchzusehen die
bereitgestellt wurde und die wir
tatsächlich erstellt haben, um zu
sehen, welches Inventar aus der Tabelle zu diesem Namen
passt. Das ist genau das, was
ich hier mache. Deshalb
überprüfe ich den Namen. Ich glaube, das funktioniert. Sie können einfach den Wind anhalten
und versuchen, es sich anzuhören. Ich denke, Sie können es herausfinden falls ich zu schnell veröffentlicht werde. Dann werden sie es zuerst finden. Dann gib vorerst einfach nein
zurück, sonst existiert es nicht. Was sonst, nein, wir drehen das um. Alles klar. Wenn das erledigt ist, können
wir für jeden von ihnen herkommen. Was wir dann tun, ist,
das Inventar positiv zu bewerten,
indem
wir das Inventar positiv zu bewerten,
indem den Inventarnamen und das aktuelle Inventar
auflisten . Wie heißt es jetzt? Inventar. Rufen Sie dieses Inventar auf, geben Sie einen Namen ab und geben Sie dann die Bestellung weiter. Ich denke, das
sollten Inventarlisten sein. Richtig? Ja. Ja. Ja, ich wende uns das
Event DT zu, wir haben das hier. Das passt, das ist es,
was wir verwenden. Wenn das erledigt ist, können wir das andere
Event auswählen , das wir
tatsächlich erstellt Das ist dieses andere
Event, das wir erstellt haben. Wählen Sie diese Option, die
die andere ID so festlegt , dass sie
mit der anderen ID übereinstimmt Andere ID. Was ist die andere ID? Welcher andere Ausweis. Die andere Kennung. Diese Kennung, die
wir hier verwendet haben, richtig? Ja. Diese Kennung
, die wir hier verwendet haben. Ordnung. Was ist dann die Diskrepanz
in einer Zeichenfolge hier Was habe ich benutzt? Was habe
ich benutzt? Lassen Sie uns das bestätigen. Lassen Sie uns das bestätigen. Wissen Sie was?
Lass uns das schnell verkabeln. Lass uns wieder hierher kommen. Ich
möchte diese Methode beenden damit
das Video nicht zu lang wird. Das andere Inventar, dann die
Inventarnummer festlegen , dann das Inventar. Inventar, dann ID.
Hol dir den Ausweis nicht. Dann Inventar,
dann die festgelegte Menge. Die Menge wird von der Einheit dt zur Menge. Int, zu Verwechsle ich das jetzt? Entschuldigung, ich sollte es benutzen. Das ist das Inventar. Der Typ von der DTU. Inventar-DTUs erhalten Menge. Das sollte ich verwenden. Dann brauchen wir den Preis. Dann können wir einen
langen Gesamtpreis festlegen. Das Inventar
wird Inventar dT sein, Inventar DTG Preis, Preis, äh, dann können wir mit dem
Inventar multiplizieren, Gleichheit mit Namen. Nennen wir Inventar einfach Equalit. Das wird langsam absurd.
Ist das nicht dem Namen nach. Okay, lass uns das einfach platzieren. Ich denke, das ist deutlich genug. Dann ist das die Menge. Das gibt uns den
Gesamtbetrag, oder? Dann das andere Inventar, dann runter mit dem Mengenpreis. Denken Sie daran, wir haben das gemacht und
geben Sie dann den Gesamtpreis hier ein. Den Preis der Ortsdaten finden Sie hier. Dann haben wir dann die
anderen Inventare. Dann die anderen Erfindungen
, die wir hier definiert haben, dann fügen wir dieses
andere Inventar Dann haben wir einen
Betrag, weil Sie wissen, dass der Betrag steigt.
Der Betrag steigt. Lassen Sie mich schon die Länge
dieses Videos überprüfen. Das ist schon 17. Leute, lasst uns das hier posieren. Lasst uns zurückkommen.
Lass uns zurückkommen. Im nächsten Video. Danke.
19. Bestellservice 2: In Ordnung Leute, danke. Danke, dass ihr
wieder zu mir gekommen seid. Das ist Z hier. Ja. Ja, dann denken Sie daran, dass wir
einen Atomkredit aufgenommen haben. Wir wollen den Gesamtbetrag im
Auge behalten, das ist dieser Preis Behalten Sie
den Gesamtbetrag im Auge, der
gerade verwendet wurde, und addieren und
erhalten, den Gesamtpreis. Ich kann die Schleife einfach wiederholen und
uns diesen Gesamtbetrag geben. Ich kann also innerhalb dieser
Methode den Überblick behalten, um das zu sehen, oder? wir damit fertig sind, protokollieren Sie
einfach einige Details. Ich sage einfach, was sind Erfinder, welche
Erfindungen bestanden Assistiert. Ja, das funktioniert. Dann kannst du einfach die andere
Erfindung machen. Wir wollen den Kerl dabei haben? Nein. Die andere Haltung im Inventar. Denken Sie daran, wir machen das,
weil ich weiß, dass ich JPA benutze. Wir wollen diese
Informationen nicht verwenden, denn wenn wir das tun, werden
sie eng miteinander verknüpft,
und das wollen wir vermeiden Dann CBO. DANN? Speichern Sie das
alles. Alles klar. Also, lassen Sie uns darauf zurückkommen. Was habe ich hier gemacht? In Ordnung. Ich habe versucht
, die Bestellung, die Bestellnummer oder die ID einzugeben. Ihre Kennung
sollte eine Zeichenfolge sein. Warum habe ich hier ein Long verwendet? Das ist definitiv ein Fehler. Warum habe ich hier ein Long verwendet? Das gibt Anlass zur Sorge. Warum habe ich einen Long benutzt? Da. Ich denke darüber nach,
warum ich dort einen Long benutzt habe. Ich schaue es mir noch einmal an. Mm Oh, ja, ja, ja, ja, ja, ja.
Ich hab's rausgefunden. Ich habe mich also ein bisschen geirrt. Wir brauchen den Ausweis. Das ist der Ausweis. Das ist nicht der Identifier. Ich glaube, ich bin gerade
über mich selbst hinweggekommen. Das ist der Ausweis. Die ID der, die wir
zuvor gespeichert haben, diese ID, also möchten wir einen Link
zum Inventar in dieser
anderen Inventartabelle herstellen Es ist die ID, genau
wie
Viel-zu-Many funktioniert, wenn Sie
die ID verwenden , um
beide Dateien miteinander zu verknüpfen Das ist genau das, was
wir hier versuchen. Ich glaube, das ist klar. Wir platzieren das hier. In Ordnung, also lass uns das durchgehen. Es mag ein bisschen schwierig sein,
zu wissen, was ich hier mache, aber lassen Sie uns das noch
einmal durchgehen, damit wir es können. Zuallererst verstehen
wir, dass
diese Persistenz ziemlich
einfach ist Ich versuche hier, für diese
Bestellung, die erstellt wurde, eine Auswahl zu Ich habe eine Bestellung erstellt, oder? Ich möchte die
ID dieser Bestellung mit
jedem Inventar verknüpfen , das tatsächlich in der
anderen Inventartabelle
gekauft wurde . Und diese oder die Inventartabelle
dient unseren Vielen zu Vielen. Richtig? Oder sollte ich sagen, einer zu
viel, das sich herumspricht? Es verbindet also
beide miteinander. So können wir für jede ID wissen, wie viele Inventare Sie durchsucht haben. Oh, wir haben dieses
Inventure zu diesem Preis gekauft, diese Erfindung zu diesem
Preis, diese Erfindung zu diesem Preis. Das ist es also,
was wir hier tun. Also schauen wir uns
zunächst die
gesamte Erfindung an,
weil die Erfindungen hier tatsächlich die
Verbindung bestimmen, oder? Tam benutzt. Wir schauen uns tatsächlich andere Veranstaltungen
der Demokraten an. Jetzt versuchen wir, jedes
von ihnen aufrechtzuerhalten. Ich glaube, das ist, dass wir die ID festgelegt haben. Diese ID ist die andere ID, die ID
, die geschrieben wurde. Ich wurde durch die Tabelle geschaffen, die wir hier platziert haben.
Dann haben wir das getan. Dann ist dieser Typ im Grunde das,
was ich zuvor erklärt habe Du versuchst, eine
Bestellung über die Benutzeroberfläche zu erstellen. Sie wählen nur die Namen
des gewünschten Objekts aus dem
Inventar aus. Dann legen Sie fest, wie viele Mengen Sie für jedes
Inventar benötigen. Also werden nur der Name und die
Mengen an das Backend weitergegeben, dann wählt das Backend sie aus. Verwenden Sie diesen Namen und gehen Sie
die Liste des Inventars durch, das im Geschäft oder in der Datenbank
verfügbar ist . Sobald es das sieht, wählt es die Entität selbst
aus der Tabelle und wählt den gesamten Datensatz aus. Es ist also dieser Datensatz, den Sie
tatsächlich wieder hierher bekommen. Es spielt die gesamte Platte ab,
und es ist diese Platte, die
wir jetzt verknüpfen
wollen, welche Platte gehört zu welchem Namen? Das ist es also,
was wir hier tun. Das ist es, was wir hier tun. Deshalb sehen Sie, dass
wir das hier haben. Ich werde versuchen herauszufinden, welcher zu welchem
gehört ?
Deshalb mache ich das. Deshalb sehen Sie, wir gehen die Anfrage
durch,
die Anfrageliste. Stimmt dieser Name für jede Anfrage mit
diesem Namen überein? Jeder, der diesem Namen entspricht gehört
offenbar dazu,
dann stimmen wir ihn ab, oder? Deshalb passt das Erste oder
das, dann stimmen wir es ab. Wenn Sie es dann gefunden haben,
machen wir einfach weiter und lassen das
einfach bestehen
, um einfach Denken Sie also daran, Inventare, dieses Inventar DTO ist ein Synonym für Denken Sie daran, dass wir das nicht gleich hier
veröffentlichen wollten. Pabla sollte zurückgehen.
Wir wollten diesen Inventar nicht
bloßstellen So entstand
dieser Erfindervertrag. Dieses Inventardetail ist
dasselbe wie das hier. Sie können also davon ausgehen, dass dies die Entität selbst
ist. Das ist der Name, den
wir versuchen,
mit der Bestellung zu vergleichen , die
eigentlich der Name
der Bestellung war , oder? Und lassen Sie uns das erklären. Ich
muss das noch
einmal erklären, damit wir
nichts falsch machen. Und deshalb mache ich das. Und sobald du es herausgefunden
hast,
oh, das ist eins, das zu mir passt
, werde ich das auswählen. Also dann an dieser Stelle die
ID dieses Inventars. Dies entspricht dem Ort,
der ID und der angeforderten Menge
, die darin enthalten ist,
und der Bestellung, die aufgegeben wurde. Dann addieren wir das zusammen. Dann bekommen wir den
Gesamtpreis, den Gesamtpreis. Dann behalten wir den
Gesamtbetrag im , der für
diese einzelne Bestellung anfällt. So wie wir den Kunden
bezahlen wollen, bezahle
ich die Kunden Wenn der Kunde
zahlen möchte, zahlen Sie
nicht jedes Inventar pro
Mal, sondern den Gesamtbetrag. Das versuche ich hinzuzufügen und hierher
zu bringen. Dann speichere ich
am Ende des Tages alles. Ja, das ist ziemlich
viel Arbeit, wir skalieren, wir skalieren durch. Wenn das tatsächlich erledigt ist, kann ich
dann auswählen, dann bauen und
weitermachen, oder ich würde weitermachen Ich sehe das einfach. Ich lese und
behalte das Inventar, San baut das Inventar mit
und führt es fort,
was das TO aufnimmt,
nimmt die Inventare auf Es nimmt die IDs auf, in welcher Reihenfolge die ID abgerufen wird,
dauert atomar lang Also wollen wir
mit Atomic Log nachverfolgen. Also ist Aon nicht normal. Der Grund, warum wir Atomic Long
verwenden , weil mehrere davon passieren
könnten, oder? Das hilft dir tatsächlich dabei, den Überblick zu
behalten, oder? Deshalb verwende ich
Atomic Log, denn wenn Sie ein normales Logbuch verwenden,
zeigen Sie Ihnen, was ich meine. Atomic Long, nenne das Mengen. Nennen Sie diese Beträge
, und das gebe ich hier weiter, richtig? In Ordnung. Nehmen wir an, es ist nicht
lang, nur lang. Mal sehen, was passiert. Siehst du? Lass uns jetzt Long machen. Lass uns das einfach aufräumen. Lass uns Betrag plus machen dann lass uns einfach
Gesamtpreis Gesamtpreis machen. Lass uns sehen, was du sagst. Siehst du? Eine Variable, die Lambda verwendet,
sollte endgültig wirksam sein, oder? Sollte final effective final sein , da es den
Lambda-Ausdruck verwendet Dadurch kann ich einen Atomlongus verwenden, der
einem Kerl tatsächlich ein Schwein
garantiert Dieser Typ benutzt nur Atomlunge, dann kann er der letzte
Typ sein, wenn du willst Das funktioniert gut. Ich
glaube nicht, dass es nötig ist. Ich definiere das einfach als Finale, dann schaue ich einfach auf
sollte nicht und es geht uns gut. Das haben wir
tatsächlich geschafft. Wir konnten durchhalten,
und ich denke, wir könnten das
testen, oder? Wir müssen das testen, was wir bisher
gebaut haben , wir haben es nicht getestet Lassen Sie uns im
nächsten Video zurückkommen, um das tatsächlich zu
testen und zu sehen, was
wir bisher erstellt haben. Also gib uns jetzt eine Antwort. Lassen Sie mich vorerst einfach eine
Antwort erstellen ,
damit es sich nur um
eine neue Antwort handelt. Dann Nachricht, sagen wir einfach,
Bestellung wird gerade bearbeitet. Dann sag, das ist Code. Dann geben wir ihm einfach
eins oder zwei, oder? Eins oder zwei. Ich bin sicher,
du weißt, was 12 ist. Ich komme im nächsten Video wieder. Ich werde
das erklären. In Ordnung. Danke, Leute. Nächstes Video.
20. Bestellservice 3: Ordnung, Leute, danke, dass ihr zu mir
gekommen seid. Das ist Z hier. Ordnung, also, du hast erwähnt, ich glaube, ich habe hier aufgehört, ein oh 212 bedeutet nur
Verarbeitung, oder? Wenn Sie den
Statuscode HTP-Statuscode überprüfen, bedeutet das, dass im Grunde genommen alle
Serben die Anfrage akzeptiert haben, aber sie ist immer noch öffentlich bearbeitet
und nicht abgeschlossen Deshalb habe ich eins oder zwei verwendet. Es wurde bearbeitet.
Okay, lassen Sie uns das testen. Und wie testen wir
das, richtig? Ich möchte nicht einfach den
Controller mit diesem Typen erstellen. Der Controller erledigt
diesen Typen, nenne es Ordnung. Controller oder
das Comeback-Kabel , das als T beibehalten wird. Dann lassen wir den Controller auf den
Konstruktor warten, dann den privaten, endgültigen Dienst, dann schauen wir mal Dann public oder Response oder Response von Response D, Response
Entity Das ist innere Physik, dann
Kreta, dann funktioniert das. Sie werden einen Anfragetext als
Anforderungstext verwenden und ihn einfach
an DTO übergeben,
dieser Typ, diese Dann geben Sie einfach
eine neue Nachrichtenantwortentität zurück eine neue Nachrichtenantwortentität Dann geht dieser
an der Leiche vorbei. Das wären diese
Punkte, andere DTO, dann HTTP-Statuspunkte in Ordnung Ordnung. Jetzt haben wir das und lassen es uns
auf Post Post Map machen. Lassen Sie uns das
bei Quest Quest Mapping generisch machen. Das sollte sein, ich nenne es
einfach Dress This
Path. Nennen wir es Ordnung. Licht, nennen wir es Ordnung. Nennen wir das direkt und wir haben dasselbe. Also gut, ich kann es tun. Das ist ein Ja. Das sind also HTTP-Anfragen. Es verwendet auch HDD-Clients. HDB-Clients können
auch für uns arbeiten, daher teilen wir Ihnen
HDB-Clients HDB-Clients Lassen Sie uns also HT-Clients verwenden. Also hast du schon für mich geschaffen. Also das hier muss ich nicht nach einem der Werke von Coston
benutzen. Also, wenn Sie welche verwenden, sind Sie damit
vertraut, ich verwende nur HP-Clients Das sollte eigentlich, ich glaube, du hast hier schon etwas
geschaffen. Oh ja, ich habe etwas hier. Also lass uns einfach
diesen Kerl benutzen, richtig? Ich habe diesen Typen. Ich glaube,
ich habe das früher in dem Projekt getestet, das ich gebaut habe. Wir haben das, damit wir es direkt
ausführen können. Bitte erinnere dich an den Namen. Lass uns den Namen sehen. Lass uns L sein. Lass uns wissen, was du wählst.
Wo habe ich das platziert? Das Projekt läuft jetzt. Lassen Sie mich meinen Compose ausführen, lassen Sie uns zulassen, dass dieser Typ im Hintergrund
weiterläuft. Ordnung. Mal sehen , ob es bereit ist, Verbindungen
anzunehmen. Ja, es ist bereit. Lass uns das nochmal machen. Ja,
lass uns das sofort rausnehmen. Nehmen wir das zur
Seite, gehen wir davon aus. Ja. Wir haben Ruler. Wir haben ein Lineal, wir haben ein Buch, wir haben ein Buch, dann legen
wir hier einen Stift hin. Lass uns einen Bleistift hineinlegen. Alles klar? Also, wenn alles gut funktioniert, wenn du
nichts kaputt gemacht hast, werde ich das machen. Das sollte
das an die Datenbank übergeben. Also Kundenname,
mein Name ist Zeko. Also, lass mich einfach meinen Spitznamen Z, Z, Zico
Z oder Zeko
benutzen Zico
Z oder Zeko Lass uns das einfach vorantreiben und schauen was passiert, wenn du
nichts kaputt gemacht hast Ich weiß noch nicht, warum
ich das hatte. Warum brauchst du das dann nicht mehr? Ich brauche das nicht. Ich glaube, ich wette dann auf etwas anderes. Lass uns das machen. Lass uns
sehen, was passiert. Okay. Also diese
Verbindung wurde verweigert. Warum wird meine Verbindung abgelehnt? Lass uns sehen. Rennt der
Typ? Ich hoffe nicht. Äh, was ist das Problem? Lassen Sie uns das anhand
der Anwendung selbst bestätigen. Oh, tut mir leid, die Anwendung
läuft nicht. Lassen Sie uns also die Anwendung ausführen. Sei es, es gibt einen Cesippi-Client, also lass uns die
Anwendung ausführen. Okay. Die Bewerbung wird
demnächst eingereicht. In Ordnung, also lassen Sie uns darauf achten, dass diese Verbindung nicht mehr verweigert werden
sollte.
Die Verbindung ist nicht aktiv. Ich möchte
dies löschen, falls es Fehler
gibt . Würde ich sehen? Vertrauen Sie mir, als Entwickler rechne ich immer mit
Fehlern.
Ich rechne mit Fehlern, damit
Sie einen guten Code haben Also schlag einfach drauf. Was passiert? Internetfehler. Beeindruckend. Mit einem solchen Fehler habe ich nicht gerechnet
.
Das ist Hash, Mann. Level Pits, ernsthaft Hash. Nun, schauen wir uns an,
was passiert ist. Gehen wir zum runden Fenster. Also was passiert, kann die
Liste nicht aufrufen , weil der Rückgabewert blah,
blah, blah, blah Dieser Typ ist null. Sehen
wir uns diesen Typen an , der sagt, die andere
Inventarliste ist nein. Hast du den Namen geändert? Okay, lassen Sie uns das bestätigen. Also verwenden wir hier Inventare. Und was haben wir hier erwartet? Liste der Erfindungen. Lass uns den Kerl sehen.
Whoa. Das ist das Problem Sie sollten also eine
Inventure-Liste haben. Erfinde die Liste Ja, so
sollte es aussehen, oder? Also lasst uns daran erinnern, dass
das in Ordnung sein sollte. Erinnern wir uns einfach
daran, dass es deins ist. Ich führe das einfach noch einmal durch. In Ordnung, alles
funktioniert erfolgreich. Wir haben eine Nachricht dazu, lassen Sie uns das in
der Datenbanktabelle bestätigen. Lass uns unsere Bestellungen überprüfen.
Nur eine Bestellung. Fantastisch. Fantastisch.
Der Name ist EZCow Die E-Mail lautet testa tester com. Was ist dann das Ereignis
Eventriy bleibt dasselbe. Dann lassen Sie uns
die Beziehung bestätigen. Ja, siehst du, die
Beziehung wird langsam besser. Cool, cool. Das ist cool. Das ist cool, Mann. Das ist cool. Es ist wirklich cool. Wir
haben eine Beziehung. Es bedeutet dieses Inventar
zu dieser Bestellung. Denken Sie daran, dies ist der erste Datensatz. Die Bestellnummer ist 1111. Ist die Erfindung, und
das ist die Menge, also können wir dann anscheinend den Gesamtpreis im Auge
behalten Ich dieser Typ, plus der
Preis für das Inventar. Das haben wir
hier. In Ordnung, also ich denke, wir haben gute Arbeit geleistet. Gute Arbeit, gute Arbeit, gute Arbeit. Gut, wir konnten etwas Gutes
erreichen. In Ordnung. Lass uns das Video hier beenden. Und wenn wir
zurückkommen, schauen wir uns noch mehr
coole Sachen an. Danke.
21. Veranstaltung: Hey Leute, Zico ist wieder da. Ordnung. Ich finde, das
wird interessant. Ich war bis zu diesem Zeitpunkt dabei, es wurde versucht,
sehr einfach zu sein, wir erklären eine
Menge Konzepte. Jetzt waren wir in der Lage, die Bestellung
zu erstellen, das Bestellungsinventar beizubehalten, es aus
der Inventardatenbank zu überweisen, und wir sind im Moment an
einem guten Ort,
wir sind an einem guten Ort Kommen wir nun zurück
zum Kern dieses Kurses
, den Frühlingsmodulen Der Kern dieser
Kurse ist, dass
wir Ereignisse verwenden, wenn wir Daten von einem Modul zu einem anderen übertragen wollen, wenn wir
Daten von einem Modul zum anderen Daten von
einem Modul zu einem anderen übertragen wollen, wenn
wir
Daten von einem Modul zum anderen übertragen wollen, oder? Das sind die ganzen
Lektionen. Ich habe erklärt , dass Spring Modulate
uns dazu zwingt, Ereignisse zu nutzen Auf diese Weise könnten wir, wenn Sie
den Service entkoppeln und zu einem komplett
separaten Projekt
mit wenig oder gar keiner
Konfiguration wechseln, einfach
einen Mikroservice
oder einen anderen Service
daraus machen den Service entkoppeln und zu einem komplett
separaten Projekt
mit wenig oder gar keiner
Konfiguration wechseln, könnten wir, wenn Sie
den Service entkoppeln und zu einem komplett
separaten Projekt
mit wenig oder gar keiner
Konfiguration wechseln, einfach einen Mikroservice
oder einen anderen Service
daraus , oder Das ist also genau das, was
wir hier tun werden. jetzt,
ohne weitere Umschweife, Lassen Sie uns jetzt,
ohne weitere Umschweife, einfach einen
anderen Event-Service einrichten. Der andere Event-Service
O Eventmanagement. Management, rufen Sie den anderen
Event-Management-Service an,
egal wie er heißt. Es ist ein Management.
Es ist ein Service, wahr ist, nennen wir ihn einfach Service. Manchmal kann die
Namenskonvention so sein. Nennen wir es einfach
anderen Event-Service. Dies ist der Leitfaden für die Verwaltung
unserer Veranstaltung. Ich sollte ein Dienst sein, der einen Konstruktor
benötigt. Verwenden wir eine TSLA Four J für den
Fall, dass wir uns anmelden müssen. Dann, da du ein Event
sendest, oder? Wir brauchen einen Herausgeber für
Anwendungsereignisse. Wir brauchen einen Herausgeber von Applici
Event, dann schicken wir ein Event Der andere würde ein Ereignis
an das Zahlungsmodul senden. Er bezahlt, das ist die Bestellung, die
erstellt wurde, verarbeitet sie. In einem solchen Fall sendet
der Kunde also tatsächlich, dann geht es zur Zahlung. Die Zahlung kann dann
abgeholt und gespeichert werden. Nun, wie würdest du das
wahrscheinlich in der realen Welt machen? In der realen Welt,
wenn Sie
Ihre Daten in der
Tabelle haben , senden Sie sie. Sobald Sie es gesendet haben, gehen die
Ereignisse in die Zahlungen über, die Zahlung wird in Datenbank gespeichert, sobald
sie in der Datenbank gespeichert ist, dann, wenn der Benutzer die
Zahlung tatsächlich abschließt, wird
der Gesamtbetrag sozusagen von der Benutzeroberfläche aus
bezahlt, richtig, mit der Karte oder mit einer
Zahlungsmethode Stimmt das? Dann kann das dann den Zahlungsservice
auslösen. Dann
kann der Zahlungsdienst in die Datenbank gehen, die ID so
auswählen, wie sie tatsächlich verwendet
wurde, sie finden und
vervollständigen, richtig? Wir übertragen das also, das kann
das typische
Szenario sein, das Sie vielleicht verwenden möchten Alles klar? In Ordnung,
also lass uns weitermachen. Lass uns einfach die Bestellung abschließen. Sie möchten also das O vervollständigen Dieses Mal werden
Sie
also ein DTO erstellen, wir
werden uns ein DTO senden, wir
senden ein
DTO von der Zahlung zur Zahlung Nennen wir es also Payment DTO. Ja, ich überlege, es Zahlung zu
nennen. Nennen wir es Andere
Zahlungen DTO. Das sieht besser aus.
Andere Zahlungen. Es sieht also aus wie eine Brücke
zwischen beiden. Andere Zahlung DTO Zahlung
bestellen DTO. In Ordnung, es ist also in Ordnung. Dann rufen wir einfach Herausgeber
der Veranstaltung an,
veröffentlichte Ereignisse Lass uns diesen Typen veröffentlichen.
Hallo. Also veröffentliche es einfach. Also, was enthält dieser Typ? Wahrscheinlich machst du diesen
Typen einfach zu einer Platte, oder? Ich sollte ein Rekord sein.
Um daraus einen Rekord zu machen? Ja, machen Sie es zu einem Datensatz und geben Sie
einfach die Zeichenfolge oder ID weiter und übergeben dann
die Gesamtbeträge , die wir
tatsächlich verwenden, der andere tatsächlich verwenden darf. Dann können wir es implementieren,
es ist nicht notwendig. Es ist wie ein Dekorateur zu sagen. Das implementiert nur
Domain-Events. Domain-Ereignisse. Wir überprüfen Domain-Ereignisse. Was
beinhaltet es? Es ist nur von J-Molekülen. Das ist
tatsächlich so, glaube ich. Wenn du das anklickst, ist
das nur ein Teil von Jmlecle, der
mit Federmodulen verkabelt wurde, Es wird also nur in der Dokumentation verwendet. Ich fand es fantasievoll,
ich habe es auch benutzt. Aber das ist nicht wirklich
verpflichtend, oder? Ich muss nur erwähnen,
dass es nicht verpflichtend ist. In Ordnung, wir haben das also tatsächlich
geschafft. Also gebe ich den Ausweis an diesen Typen weiter. Also das ist jetzt erstellt. Also das ist WiderInst
beschwert sich nicht mehr, keine Fehler. Das
beschwert sich also nicht mehr. Lassen Sie uns also einfach ein Protokoll erstellen, damit wir die Protokollinformationen verfolgen
können. Nehmen wir dann an, dass wir andere Zahlungen
abschließen. Andere Zahlungen abschließen, ja. Mit Einzelheiten,
Einzelheiten. Turm. Richtig, ich denke, es
sollte funktionieren, oder? Das heißt, du veröffentlichst,
wir brauchen einen Zuhörer. Das ist der Punkt.
Wir brauchen einen Zuhörer. Wir können nicht veröffentlichen,
ohne einen Zuhörer zu haben. Es muss einen
Zuhörer geben. Wenn wir veröffentlichen, muss es einen Zuhörer
geben Lassen Sie uns schnell zum Zahlungsservice und
dem Zahlungsmodul springen Zahlungsservice und
dem Zahlungsmodul ,
das
ich sagen wollte, dann das Payment
Event Management
oder den Manager oder den Payment
Event Service erstellen oder den Manager oder den Payment
Event Service Sie nennen es einfach Payment
Event Service, der die Ereignisse verwaltet oder sich die Ereignisse
anhört . Sie nennen
es einfach Ereignisse Entweder es ist Sinn oder du hörst zu. Nennen wir das Event Listener
Payment Event Service. Das nennen sie einfach Zahlung. Ereignis. Service, derselbe bei SLO J bei Service at Requires
Constructor. In Ordnung. Wir haben die Verkabelung. Für diesen Typen
brauchen wir das Repository
offenbar, weil wir ziemlich hartnäckig
sein werden. Dann möchte
ich hier nicht die Seifenblase platzen lassen,
aber das ist sehr wichtig. Das ist sehr wichtig,
Leute,
bitte passt auf. Hier erhalte ich die
anderen Zahlungen DTO. Die anderen Zahlungen DTO. Etwas sollte
dir sofort in den Sinn kommen. Ich habe das Modell überschritten, oder? Ich habe ein Modell überschritten. Ich
suche jetzt nach diesem Typen und dieser Typ ist
im anderen Dienst, du weißt, das wird
sich beschweren, oder? Das wird sich
definitiv beschweren. Weil wir wissen, dass es sich beschweren
wird, wissen
wir genau, was
wir tun müssen, oder? Weil es sich beschweren
wird, zeigt
es, dass wir dieses
Unterpaket
tatsächlich offenlegen müssen . Was wir für das Inventar gemacht
haben, wir müssen das offenlegen, oder? Sie könnten also im Grunde einfach
die anderen
Zahlungsdetails alleine wählen und sie offenlegen , weil diese
Leute nicht gebraucht werden, oder? Also, wenn du qualitativ hochwertige Informationen magst, werde ich einfach
alle Details offenlegen , weil sie nicht
wirklich etwas bewirken. Sollte ich irgendwas
geheim sagen oder so. Also platziere ich das einfach hier, erstelle
einfach die Pakete
info Parking ger info, ich will den Typen bloßstellen Ich nenne es einfach bei g. Merken Sie sich den Namen Interface, auf den
Sie abzielen, G, Spring Framework, Module
It, den Namen Interface. Denken Sie daran, dass Interface der Name der Schnittstelle sein
sollte , nehme
ich an, das ist DTL Das ist es. Im
Grunde ist es das. Wenn du mich bloßstellst,
müssen wir der Bezahlung sagen, dass hey, erwarte einen Typen von mir.
Erwarte etwas von mir. Wir haben erwähnt, dass
man erwarten muss, das ist Respekt und
wie erwartet es bei g g g das Spring-Framework, das Modul das
Anwendungsmodell, dann erlaubte Abhängigkeiten,
was eine Liste ist, und das sollte erwarten,
was Sie vom DTO-Modul
erwarten sollten , dann die Unterstimmung D TO Ich bin mir sicher, dass das klar ist, Leute. Das ist genau das, was wir auf der anderen Seite
gemacht haben und das sollte angemessen
funktionieren. Bevor wir etwas für mich
tun würden, lassen Sie uns einfach unseren Test durchführen. Lasst uns sichergehen, dass ein Test nicht kaputt gegangen
ist, Leute. Denken Sie daran,
das ist die Kohle. Wir müssen immer testen , weil wir
viele Teile bewegt haben, also viele Teile. Wir müssen wissen, ob
nichts kaputt gegangen ist. Ich bin sicher, du weißt, dass
das kaputt geht, oder? Ich glaube, ihr
kennt diese Pause. Es geht nicht kaputt. In Ordnung. Also jetzt in der Lage zu sein, das zu
erreichen, richtig. war in der Lage,
Dinge zu bewegen, weil wir diesem Typen
bereits gesagt haben ,
woher
es kommt, wohin es gehen wird und
alles in Ordnung ist. Lassen Sie uns den Kerl isolieren. Zahlungen Lass uns
im Mülleimer nachschauen, weißt du. Es erwartet keine
Abhängigkeit, oder? Die Frage wird
mir jemand stellen, oder? Warum du gesagt hast, warum du den Test von
Anwendungsmodulen verwendest, sollte
ich die direkte Abhängigkeit vom
Boottrack haben. Warum einfach nicht kaputt gehen?
Einfach? Ist es der Mülleimer? Wenn es diesen Dienst leistet, erfüllt
es Ihre Aufgaben, wenn es einen Controller trägt oder
Komponenten
trägt,
wenn es ein Mülleimer ist, ja, es wird Aber wenn es kein Mülleimer ist, wird
es nicht kaputt gehen. Lass uns den Test schnell noch einmal machen
. Das ist es, was wir enthüllen. Gehen wir zum anderen Dienst. Der andere Dienst ist als öffentlich
markiert. Versuchen wir bewusst,
dies mit dem
Zahlungsdienst zu verbinden. Lass uns das machen. Damit du verstehst
, dass es ein Service
sein muss , den du unterbrechen kannst. Es ist kein Service, er
wird nicht kaputt gehen, oder? Das versuche ich hier
wirklich zu betonen. Lass uns das ausführen. Lassen Sie uns
das ausführen, lassen Sie uns das noch einmal ausführen. Für den Bezahldienst verdrahten wir
jetzt in einer Mülltonne. Siehst du? Das geht kaputt.
Was steht da? Wenn du es dir richtig ansiehst. Modul, das hängt von diesem Typen ab und
wovon hängt es ab? Hängt von diesem,
diesem, diesem,
diesem anderen Service ab, weil es ein Mülleimer ist. Wir müssen
den Unterschied herausfinden. Wenn Sie nur bis ins kleinste Detail
verkabeln , passiert nichts. Aber wenn du das tust, geht
es tatsächlich kaputt. Ich erinnere mich, dass du weißt,
wie man das repariert. Wenn du das beheben willst, das einbinden
willst, benutzt
du einfach diese direkte Abhängigkeit von
Boosra,
aber das machen wir nicht Ich bin nur hergekommen, weil ich das
gar
nicht erst aufgedeckt Wir senden Ereignisse, erinnerst du dich? Ich bin mir sicher, dass das Claire ist.
Das haben wir geschafft. Lassen Sie uns
diesen Test einfach noch einmal durchführen, und er sollte nicht
fehlschlagen. Nimm die Selfen. Das ist wieder, tut mir leid.
Dieser ist wieder da. Falsch. Das sollte nicht
kaputt gehen. Okay, durch ,
durch. Lass uns das
einfach schnell überprüfen . Es geht nicht kaputt. Okay. Dieses Video
wird sehr lang. Ich konnte hier also
einige wichtige Dinge erledigen, also werden wir
im nächsten Video mit dem weitermachen, was wir
aufgehört haben. Danke, Leute.
22. Veranstaltung 2: Hallo, Leute. Schön,
dass du wieder bei mir bist. Bei Angina, wenn wir
tatsächlich versuchen zu
sprechen, mit unseren Freunden und unseren Mitmenschen alles Gute zu wünschen und wahrscheinlich eine Party zu Wir brauchen viele
Leute. Ihr seid wahrscheinlich einfach hey, meine Leute. Hey Leute, Art, lasst uns da
weitermachen, wo wir anfangen. Jetzt schicken wir etwas
vom anderen Dienst, wir veröffentlichen eine Veranstaltung. Wir brauchen einen Zuhörer.
Wir veröffentlichen es von diesem Typen. Wir
brauchen einen Zuhörer. Wie hören wir zu? Nun, es gibt eine Regel, die festgelegt wurde, wenn
Sie Spring-Module verwenden. Wenn Sie versuchen, ein Ereignis zu senden,
denken Sie jetzt darüber nach. Denk darüber nach, oder?
Du schickst eine Veranstaltung hierher. Das ist also eine
Dokumentation, die
vielleicht etwas schwierig zu bekommen ist , aber ich möchte sie auf sehr
einfache Weise erklären, oder? Du versuchst zu senden und versuchst
, ein Detail zu unterschreiben, oder? Offenbar enthält das
einige Daten, oder? Und weil Sie
versuchen, die Daten zu senden, müssen
sie
transaktional sein, richtig? Es sind die Transaktionsdaten
, richtig? Also, weil es transaktional ist, weil es tatsächlich
transaktional ist,
äh, es ist eher eine Pipeline, eine Pipeline, durch die Sie versuchen, Daten Weil das transaktional ist, die nächste Frage, die du dir dann
stellst wenn
du es dir anhörst,
willst du es synchron willst du es synchron Weil Ereignisse ihrer Natur nach
synchron sind. Willst du es synchron
hören? Wenn du synchron hörst, kann
alles passieren, es kann kaputt gehen. Wie
willst du es hören Du willst es wahrscheinlich, ich
möchte mir das anhören, aber ich werde es mir wahrscheinlich
anhören Ich werde es mir wahrscheinlich
anhören, indem wahrscheinlich einen
Event-Listener verwende, einen Event-Listener, würden
Sie nicht einen Event-Listener verwenden Ich möchte einen Event-Listener verwenden tatsächlich
funktioniert.
Oh, wir haben einen
Event-Listener, Dann willst du auch sagen, ich will ein Waschbecken sein, oder? Damit das
tatsächlich funktionieren kann
, damit es nicht beim s kaputt geht.
Aber das führt dazu Sie eine gewisse
Komplexität haben, oder Sie möchten
eine Transaktion als
Transaktionsereignis-Listener verwenden eine Transaktion als
Transaktionsereignis-Listener Sie möchten einen
Transaktionsereignis-Listener. Der Punkt für den
Transaktionsereignis-Listener bei einer Synchronisation. Spring Modulate
gibt uns also schon einen Alias
für all Ein Alias, um das zu verwalten. Und das ist die
sogenannte AT-AT-Anwendung. Listener für das Anwendungsmodell. Ein
Anwendungsmodell-Listener. Lassen Sie uns ihn untersuchen Siehst du, es ist jetzt eine Transaktion. Ich stecke den alten von selbst ab. Denken Sie daran, dass die Ausbreitung mehrere davon
hat. Es verwendet die erforderliche
obligatorische Unterstützung. Ich unterstütze grundsätzlich die Aussage wenn es eine Transaktion gibt,
bitte diese verwenden. Obligatorisch nur eine, aber wenn
Sie require new verwenden, wird
es von
der alten Transaktion abgeschnitten
und eine neue Transaktion erstellt, mit der
Sie tatsächlich arbeiten können. Ich musste das früh erledigen. Dadurch wird eine völlig neue
Transaktion erstellt, die sich nicht von dem Ereignis
unterscheidet, das sie sendet. Wenn das erledigt ist, wie sieht das aus, dann können
wir es einfach ausdrucken. Lassen Sie uns ausdrucken, um zu sehen, wie der
Hörer es erhalten hat. Hör zu. Empfangen.
Es ist nicht eingegangen ,
also lassen Sie uns
die Zahlung an Sie weiterleiten. Verwenden wir ein Protokoll. Warum
verwende ich ein System, das Ausgaben ausgibt? Lassen Sie uns ein Protokoll verwenden. Nehmen wir an,
andere eingegangene
Zahlungen andere eingegangene Zahlungen. Ich möchte etwas im Listener. Es hat etwas im Hörer. Im Zuhörer. Großartig. Lasst uns
dieses Event nochmal ausrichten. Mal sehen, ob das wirklich die Ereignisse
annimmt.
Wir müssen das bestätigen. Event empfangen, es
empfängt das Event nicht, warum
lernen wir
dann den Frühlingsmodus Was ich tun würde, ich
fange mit der Bewerbung an. Ich beginne mit der Bewerbung. Gehe
ich während des Starts zu meiner HTP-Anfrage? Wo ist der Typ. Ich kann einfach vom Controller aus
gehen. Wir haben das, sie ist
immer unter Kratzern. Ich glaube das. Ich habe das. Ich
möchte das nur ein bisschen ändern. Lass uns das codieren,
ändere einfach deinen Namen. Z eins, etwas anderes als
der erste Kunde, Test eins, Test eins, Test eins auf test.com Lassen wir die anderen unverändert. Lasst uns das abfeuern. Lass uns sehen, was passiert.
Okay. Also diese Prozesse. Lass uns die Logs überprüfen. Lass uns die Logs überprüfen. A Lass uns die Logs überprüfen. Also oder Inventar, oder? Das geht durch. Das
ist also die Reihenfolge, die geschaffen wurde. Created geht tatsächlich.
Also, das ist alles, was wir getan haben. Dann haben wir tatsächlich
beständige Lagerbestände, oder? Das geht durch. Was ist, wenn
mein Inventar bestehen bleibt? Nein. Wahrscheinlich habe ich mich nicht
um den Ausweis gekümmert. Oh, okay, das Inventar
nacheinander. Okay, also beenden wir
es automatisch. Also wo ist mein Wo
ist mein Zuhörer? Mein Zuhörer
kommt nicht durch. Etwas
passiert nicht, oder? Warum kommt es nicht durch? Also Nummer eins, richtig? Warum kommt es nicht durch? In Ordnung, also lass uns das
herausfinden. Ordnung, Leute. In Ordnung. Tut mir leid, dass ich ein bisschen
abgelenkt war, denn schnell
konnte Pose etwas
Wichtiges erledigen, oder? Ja. Also hier, wie du das siehst. Jetzt müssen wir die Veranstaltung senden. Aber
wenn Sie das Event vor dem Senden sofort auslösen mussten, was wir beim letzten
Mal gemacht haben, hat das nicht funktioniert. Wir sind nicht in der Lage,
die Details zu erfahren, oder? Details sind nicht durchgegangen. Alles, was wir gesehen haben, war, dass wir das gesehen haben
und wir
den Zuhörer sehen können , nur weil ich glaube, dass uns hier
etwas fehlt Lassen Sie uns das einfach ein bisschen aufnehmen. Das ist der andere Service, den ein
anderer Service anbietet. Ich habe nicht verkabelt. Ich rufe den Kerl noch nicht an.
Siehst du, es ist noch nicht benutzt. Ich soll das
und das tun, dann das tun. Ich kann mir das
dann einfach innerhalb dieses Typen aussuchen. Erledige einfach diese komplette
Bestellung, nenne sie. Es erfordert eine Bestellung TO. Ruf einfach order TO order
TO an, es war zu neu. Was ist hier, was
die andere ID aufnimmt, bekommt keine ID. Dann die Gesamtbeträge, dieser Typ gibt diesen Betrag hier an,
übergebe einfach diesen Betrag. Ja, was ist die Beschwerde? Ich verstehe. Also, was ist die Beschwerde? Dieser will schnüren. Okay, ich habe die
andere Kennung verwendet. War es die andere Kennung? Ich möchte rübergehen. Lass mich ein bisschen
darüber nachdenken. Übergebe ich die andere
Kennung oder möchte ich
die ID weitergeben , die ich weitergeben möchte. Lass es uns einfach herausfinden.
Mach es einfach ein bisschen. Okay. Ja, ich glaube, ich möchte
die andere Kennung weitergeben, oder? Ich denke, das
sollte der logische Sinn sein. Identifikatoren, an
die ID sollte wohl nicht gehen, nur weil die Zahlung nichts
über die Bestelltabelle weiß , oder? Der Identifier
sollte also verwendet werden, oder? Also das ist es. Das sollte ich. Woran gehe ich hier vorbei?
Lang. Ja, das sollte sein, das stimmt. Ich sollte das weitergeben
, weil die Zahlung nichts über die OR-Tabelle weiß, was eher ein anderer Modus ist. Ich identifiziere, ich kann dann das oder
holen, falls ich
das andere brauche und dergleichen Dann schiebe ich das hier rein. Das ist cool. Das ist cool. Lass uns damit
anfangen, lass uns einen Typen reinholen, das ist der CP. HCP. Ich werde es einfach
schließen, um es wieder zu öffnen Nenn das zwei. Dann ist
ein Code wahr, lass uns diesen Typen treffen. Direkt. Das ging durch. Lass uns nachschauen. Fantastisch. Siehst du, alle Zahlungen, die bei
Listen eingegangen sind, funktionieren. Das funktioniert gut. Das funktioniert. Jetzt ist es uns gelungen, Ereignisse zu
nutzen. Wir haben die Ereignisse
von Send the Events aus gesendet. Nun, warum Sie das jetzt
haben, ist ein NIO,
weil der Grund, warum Sie NI verwenden weil Sie daran denken, dass wir Votal-Treads
verwenden Dieses Nb
Votual Tread habe ich heute noch nie virtuell gehandelt, aber
ich glaube nicht, dass
ich Aber hier wird im Grunde NIO
verwendet, was cool ist. Aber wenn du anfängst,
hört es auf, ein Steuergerät zu
benutzen, was bedeutet, dass es nicht
auf derselben Lauffläche läuft Dieser Typ rennt nicht.
Das ist der Hauptthread. All dies sind separate Lesevorgänge, separate Threads, die einlaufen Denn denken Sie daran, wenn wir es
senden, hören Sie
es synchron ab, es funktioniert
also nicht
auf demselben Das ist der Hauptthread,
in dem es ins Spiel kommt. Dann, wie zu dem Zeitpunkt, als
die Anfrage ausgelöst wurde, wurde
sie von einem anderen
Lesevorgang ausgelöst, nämlich dem Tread Sie können die Schalen sehen. Das ist, wenn ich
die Cblets initialisiere, dann ist
dieser Teil ein anderer
Thread. Denn denken Sie daran wir verwenden das seit
und wir sind Sync, der
im Grunde genommen
einen einfachen Steuervollstrecker verwendet hat, wenn ich mich einen einfachen Steuervollstrecker Ich denke, das ist, dass wir hier die guten Sachen machen konnten Wir haben ein Ereignis
vom anderen Verwaltungsdienst weitergeleitet und der Zahlungsdienst oder Zahlungsmodul konnte es
empfangen. Ich bin gutes Zeug. Dann können wir es
aus dem nächsten Video abholen. Danke Jungs, dass ihr bis zu diesem
Zeitpunkt
bei mir geblieben seid. Danke.
23. Fehlgeschlagenes Ereignis simulieren: Hallo, Leute. Lass uns
ein bisschen Hausputz machen. Das sollte ein
relativ kurzes Video sein. Ich habe
die Probleme bei Get Up erstellt. Das sind die Probleme. Im
Einsatz, also verkabeln Sie das einfach. Lassen Sie uns
das schnell für andere Dienste
festschreiben . ID
acht, das ist die Dann gingen wir zum Service. Verliere diesen Ausweis. Es ist keine gute Commit-Nachricht, also tut mir das leid. Ich sehe, dass ein anderer Dienst implementiert
wurde, ein Ereignisdienst implementiert wurde oder Ereignisse als
Ereignis angezeigt, das durch
Ereignisse aus einem anderen
Dienst oder einem anderen Modul erklärt wird. Also Zahlungen, Zahlungen, Modem. Entschuldigung, ich behalte das nicht richtig im Auge
, oder? Also lass uns das einfach
machen, ein bisschen Hausputz machen. Dann können wir das einfach
so nah an unseren Mann heranschieben. Und ich sollte das im Grunde
schließen, oder? Also sollte das weg sein. Lass uns auffrischen. In
Ordnung, es ist also weg. Ordnung. Bevor wir schnell gehen, soll
es ein Litial-Video
sein Lassen Sie uns schnell
die Datenbank erkunden. In Ordnung, das
ist also die Datenbank. Nun, wir haben uns
diese Veranstaltungspublikation nicht angesehen. Jetzt wollen wir mal sehen. Kannst
du sehen, dass es einen Rekord gibt? Lassen Sie uns das untersuchen. Also der Rekord ist vom
Ereignis zum Bestehen. Denken Sie daran
, dass ich erklärt habe, dass es möglich ist die Daten gleichzeitig ausfallen. Deshalb versuchen wir, es synchron
zu senden. Aber wenn Sie es
genauso synchron senden, können immer noch
Dinge schief gehen Was passiert also, wenn
Sie
Ihre Ereignisse tatsächlich vom anderen Dienst aus starten , während Sie Ihre Ereignisse auslösen Das Spring-Modul sucht ständig nach all Ihren Ereignissen Pigs Events schalten
sie in der Datenbank frei. Diese Veranstaltungspublikation.
Dort ist es. Wir haben das
CLIs-Ereignis, das
das JCN-Format
eines Ereignisses enthält das JCN-Format , das standardmäßig verwendet wird.
Sie können es ändern Sie können es
gut ändern, wenn Sie
ein Teil wollen , dann die Dokumentation,
Sie können es ändern. Ich denke, ich bin gut und
arbeite mit Jason, dann setze ich das
Veröffentlichungsdatum, dann die Hörer-ID, die Hörer-ID ist immer, wenn du dir das ansiehst, lass uns das mal
richtig schließen Das ist immer der
kanonische Name, oder? Wir haben den kanonischen Namen. Ich
glaube, so heißt es? Ich glaube, das nennt man
den kanonischen Namen. Ja, ich glaube, so heißt
es. Sie sehen hier
steht
der Dienstname, dann der kanonische Wenn Sie den VN-Typ überprüfen, ist
der Vn-Typ ein kanonischer Das ist erwartungsgemäß der kanonische Name
. W ist das Paket, dann der Klassenname selbst Das ist im Grunde das, was es ist. Dann das Fertigstellungsdatum, falls es nicht abgeschlossen ist, wäre
das. Das wird also Dial Bill sein aber lassen Sie uns versuchen zu simulieren,
wann eine Ausnahme passiert, wann eine Ausnahme
tatsächlich eintritt. Was wir also tun werden werden
wir innerhalb der Dienste „
Lass uns die Ereignisse senden“, „Lass uns
die Ereignisse senden“ und
dann innerhalb der Zahlungen
im
Event-Service „Zahlungen“ machen Lass uns
die Ereignisse senden dann innerhalb der Zahlungen im
Event-Service „Zahlungen Lassen Sie uns einfach eine Ausnahme anzeigen. Einfach neue
Laufzeitausnahme anzeigen. Löst eine neue Laufzeitausnahme aus. Dieses Feld, dieses Feld. Ich möchte den Unterschied zeigen. Lass uns das nochmal machen.
Lassen Sie uns das noch einmal ausführen. den Fall,
dass es
eine Ausnahme gibt
oder etwas passiert, gibt
oder etwas passiert,
was erwarten wir in der Tabelle mit der Veröffentlichung der Ereignisse? Wenn das gestartet ist, gehen
wir zu diesem Typen. Lass uns einfach mit
diesen Daten arbeiten. Lass uns nochmal. Ich habe nur mit Daten drei gearbeitet, dann habe ich gerade diese drei.
Dann lass den Kerl einfach laufen. Ordnung, das funktioniert.
Es wurde eine Ausnahme angezeigt. Sie sehen, wir lösen eine
Ausnahme aus, dass dies fehlgeschlagen ist. Schauen wir uns nun die Tabelle mit der Veröffentlichung der
Ereignisse an. Kannst du den Unterschied erkennen?
Wenn eine Ausnahme auftritt, werden Ihre gesendeten Daten
trotzdem protokolliert. Es ist jedoch nicht abgeschlossen, sodass es nicht abgeschlossen ist. Zumindest ist der beste Weg zu
suchen oder zu wissen, ob
die Daten vollständig sind,
ob die Veranstaltung
abgeschlossen ist oder nicht,
die abgeschlossenen Termine, an denen wir nicht abgeschlossen sind, nicht da zu sein.
Du wirst es dort nicht sehen. Ich wollte nur darauf hinweisen
, weil wir damit einen großen
Meilenstein erreichen
werden, wenn wir versuchen,
das zu umgehen, weil wir
einige tolle Umgehungsmaßnahmen durchführen
werden,
um die Daten herauszuholen dann die Ereignisse zu veröffentlichen. Wir sehen, es ist ein wunderschöner Song, kommen
wunderschöne Sachen auf uns zu, Leute, tolle Sachen kommen. Bleib einfach bis zum Ende bei mir. Lass uns das Video hier einfach beenden und das nächste Video ansehen. Tschüss.
24. Auftragsintegrationstest erstellen: Hallo. Hallo da. Ja, danke
noch einmal, dass du zu mir gekommen bist. Miss Z hier. In Ordnung. Also heute, das letzte Video, wir haben tatsächlich ein Feldereignis
simuliert und wir können in
der Datenbank genau sehen ,
wie das funktioniert Lassen Sie uns das schnell und ganz schnell zeigen
. Lassen Sie uns das einfach ausführen.
Lass uns das ausführen. Okay. Es kommt bald. Es kommt. In Ordnung,
schauen wir einfach in der Datenbank nach. Sehen wir uns die fehlgeschlagenen Ereignisse in der Tabelle zur Veröffentlichung der Ereignisse an. Ordnung, wir können sehen, ob es tatsächlich nicht abgeschlossen Dieses
Abschlussdatum wäre Null. Ordnung. Damit
wir dazu in der Lage sind. Wir haben
den anderen Service bereits geschrieben. Wir sehen den anderen Service,
wir haben einige Details geschrieben. Warum schreibst du nicht einen
Integrationstest dafür, einen Ig-Test
dafür, der einfach diesen Typen anruft und einfach etwas
daran arbeitet, richtig? Gehen wir also
zur anderen und machen wir die
andere Integration. Dann entscheide ich mich einfach für die automatische Verkabelung bei verkabelt. Einfach den Service automatisch verkabeln. Ja. Dann lasse ich das
Verifizierungsmodul in Ruhe. Ich erstelle einfach einen weiteren Test. Ich nenne es einfach einen neuen
Test, die neue Testmethode. Ich sage einfach Tests, nenne es
einfach Test. Was Sie Service
Service nennen, heißt Cretda. Alles klar? Nun, wir haben
es einfach direkt getroffen. Und ich denke, Sie können dafür intelligente
Testabkürzungen generieren . Ja, Tests. Ja. Also zeigt es dir
, wo der Klassenname ist. Mal sehen, der Klassenname. Nein, ich möchte, dass es in „Mal sehen“
steht. Kann ich wählen? Lass uns sehen. Kann ich mir welches aussuchen, ich
möchte, dass es hier geschrieben wird. Okay. Sprich
lauter, Typ. Lass uns sehen. O Zielpaket,
anderer Klassenname. Nennen wir es O. Ich
denke, es sollte O sein, Integration, Integration,
Test, dann diese Reihenfolge erstellen. Lass uns sehen. Ich denke, das sollte einfach passen,
wenn ich mich nicht irre. Das Verzeichnis
enthält bereits die ODatee-Klasse. Ja, ja, ja. Ja, ja, ja. Das ist es, was ich will. Ordnung. In Ordnung. Lass uns ein neues erstellen,
lass es uns einfach simulieren. Ordnung. Also, wie
würdest du simulieren? Wir feuern einfach den anderen ab und wir stellen fest dieser Controller nicht
wirklich viel macht, also werde ich den Controller nicht wirklich einfach
testen. Ich werde den
Service einfach direkt testen. Lassen Sie uns einfach Details erstellen.
Lassen Sie uns die Details erstellen. Lass uns einfach hier reingehen. Lassen Sie uns diese Reihenfolge erstellen, die DTO
DT der neuen Ordnung DTO entspricht. Was erwartet er immer Kundenname? Nennen wir diesen Test
Test Man Test Man. Dann die E-Mail, E-Mail, ich nenne es einfach einen
Test bei Tests.com Dann braucht es eine Liste
von Listen , ich nenne das einfach
Listenintegration, wie hast du das nochmal genannt Lass es mich
noch einmal überprüfen. Es heißt Inventar Inventar Request DTO Nennen wir es Anfrage Dtistqu. Ich kann einfach eine Liste von Dingen
verwenden, ich Dann erstelle ich Lass uns einfach
drei neue Inventare haben, QuestTo drei neue Inventare haben, QuestTo Was erwartest du? Du kannst einen Namen
erwarten. Lass uns
einfach ein Lineal benutzen. und ein neues Inventar TO aus, es sei denn,
es ist Nummer drei uns einfach eine Mutter und ein neues Inventar TO aus, es sei denn,
es ist Nummer drei. Ich glaube, da ist ein Stift. Ich wähle einfach vier. Ja. Also haben wir das, das ist zufrieden.
Rufen Sie einfach direkt an. Wir rufen einfach den Make Order an. Wir nennen diesen Typen einfach „
O Quit“. Wir bekommen nur die Antwort. Asset
Lass uns ein paar Beitritte machen Lasst uns ein paar Beitritte machen. Ich bin der Meinung, dass wir das Hamcrest
tatsächlich in Form einer Substanz haben
sollten , die Meinung nach eine prostatische
Methode sein sollte Das sollte heißen: Lass uns das C
benutzen oder lass uns die CAPI benutzen Das funktioniert. Ich bevorzuge diese
Accession Assets. Das ist es. Geben wir einen anderen
Punkt ein: Nachricht ist gleich, ist gleich Test. Was hatten wir? Lassen Sie uns
einfach auswählen, was wir hatten Was
haben
wir in den Service aufgenommen? Ich denke, das ist dieser Typ, zeigt es diesem Kerl, zeig dem das,
dann haben wir auch noch einen anderen. Wir zeigen einen anderen Punktstatus an. Lassen Sie uns eins oder zwei programmieren.
Lass uns einfach erkunden. Lass uns sehen, ob gerade, ich es positiv ist, positiv ist. Es ist positiv. Stapes equal to
equal ist auch in Ordnung. Minus entspricht eins
oder zwei, eins oder zwei. In Ordnung. Also einfach Integrationstest,
nur um sicherzugehen, dass das funktioniert, und anscheinend wird das
funktionieren. Das wird funktionieren. Ich möchte den Integrationstest nicht übertreiben. Ich hätte sagen können, lass uns in die Datenbank
gehen, einige Details posten
und uns vergewissern , dass der Betrag tatsächlich dem gleichen
entspricht Ich denke, das ist fair genug.
Das ist fair genug. Lass uns das machen. Lass uns das so laufen lassen. Das funktioniert? Bist du
sicher, dass das funktioniert? Ordnung. Also
gehen wir zu einer Szene, dem Meer, dem Meer, dem Meer, dem Meer, dem Meer. In Ordnung. Ja, die Tests sind bestanden. Fantastisch. Also wo wir das einstellen sollen, funktioniert
es tatsächlich und
das funktioniert genau. Wie Sie sehen können,
waren wir in der Lage, genau das zu tun. Ordnung. Also haben wir
einen guten Funktionstest Ja. Ja, um das tatsächlich auf
Bonität zu prüfen. Wenn Sie vom Controller
aus testen wollten, ist
das auch in Ordnung. Ich bevorzuge es einfach, tatsächlich
aus dem Service auszuwählen , nur
um den Service
direkt zu testen , weil der Controller
nicht wirklich viel macht, also möchte ich nicht einfach aus diesem Blickwinkel
testen, aber Sie können das auswählen und
von dort aus testen. In Ordnung. Ordnung, ich werde dich
im NSTA-Video sehen. Ja.
25. Auftragsintegrationstest 2 erstellen: In Ordnung, Leute, danke, dass
ihr wieder zu mir gekommen seid. Das ist Z hier. In Ordnung. Ich will hier einfach
was machen, oder? Lass uns einfach einen weiteren Test erstellen. Ich möchte einen weiteren Test erstellen, dann besprechen wir
die nächste
Vorgehensweise für das, was wir tun wollen. Ordnung. Also, Spring moduliert, es gibt
tatsächlich eine Varianz, die wir eher
verwenden können ,
als ob es sich um ein Szenario oder einen szenariobasierten
Test Versuchen wir das zu simulieren. Versuchen wir, eine Veröffentlichung zu
veröffentlichen, die meiner Meinung nach
als Zahlungsdetails bezeichnet wird. Versuchen wir es einfach zu simulieren. Wir können hier ein Szenario einbauen, Cario-Szenario, dann können wir sagen, dieses
Szenario, das Veröffentlichen, dann wird ein Lieferant
benötigt,
weil es
einen Lieferanten benötigt , damit wir
eine neue Bestellung bezahlen können ,
DTO, nur Simulation Dann
benötigt dieser eine andere ID. Ich gebe einfach eine zufällige UID ein, einen zufälligen
UD-Punkt, eine UUID Zufällige Zeichenfolge. Dann benötigt man einen hohen Betrag, den
ich einfach auf 5.000 setze. Schreiben Sie auf. Dann können
wir sagen, ich warte. Ich warte auf einen bestimmten
Ereignistyp. Welcher Ereignistyp? Derselbe Ereignistyp,
derselbe, also wollen wir darauf warten. Dann warten wir, dann
wollen wir sehen, ob er passt. Es gibt ein Matching, dazu braucht es
auch ein Prädikat. Das erfordert ein Prädikat. Wir möchten sichergehen, dass diese
Ereignisse, die wir senden auch dieses Ereignis einen Betrag haben
, der 5.000 entspricht Das ist also ein guter
Test, dann kommen wir an, dann verifizieren wir,
kommen an und verifizieren. Dann können Sie auch nach den Ereignissen
suchen, dann sagen wir, drucken Sie einfach
etwas aus, oder? Ich drucke einfach etwas. Die
Ereignisse, das sind Summen. Schauen wir uns die Beträge an, die es
tatsächlich waren . Lassen Sie uns das ausführen. Lassen Sie uns das ausführen und
sehen, wie es aussieht. Diese Tests können
Sie durchführen, oder? Das ist also ein Szenario. Ich glaube, es gibt auch eines davon, bei dem ich die Kosten
eines Videos
zeigen würde ,
es tatsächlich zeigen , sodass wir nicht
genau sagen können, wie das funktioniert. Wenn du es dir also richtig ansiehst, siehst
du, dass es bestanden ist, oder? Und das wurde tatsächlich gedruckt. Es kann also tatsächlich verwendet werden. Wenn wir
den Wert hier ändern, geben
wir ihm einfach einen anderen Wert und versuchen
wir, ihn auszuführen. Sie werden sehen, dass es
nicht zur Veranstaltung passt. Die Veranstaltung wird
scheitern, oder? Die Veranstaltung wird fehlschlagen, weil
sie nicht diesem Betrag entspricht, Betrag hier
nicht entspricht. Du sagst, warte auf
dieses spezielle Ereignis. Sobald diese Veranstaltung veröffentlicht
wurde, warte auf diesen Typen und versuche zu sehen, ob sie
diesem Betrag entspricht. Und wenn es passt,
dann mach weiter. Wenn es nicht passt, offenbar
um eine Ausnahme auszulösen. Okay, du siehst,
es wartet, weil dieser Typ tatsächlich
wartet, wartet Es wartet eine
Weile, um zu sehen, ob du irgendwelche Ereignisse findest. Es gibt
eine Timeout-Sitzung Also, wenn wir an diesem Kerl
festhalten wollten, mussten
wir diesen Kerl
öffnen, diesen Kerl öffnen Siehst du, dieser Typ
geht tatsächlich auf Events, Ergebnisse. Wenn Sie die
Ergebnisse von Veranstaltungen öffnen, überprüfen wir das genau. Wenn Sie genau nachschauen und es tatsächlich eingrenzen, passiert hier tatsächlich
viel, hier passiert tatsächlich viel. Also ja, dieser Ereignistyp,
was ist der Ereignistyp nochmal? Das ist das Ereignis.
Lass uns zurückgehen. Gehen wir zurück, damit ich es aufspüren kann. Dieser Typ und diese
Event-Eingabe haben ihn überholt Lassen Sie uns die erste Option überprüfen. Dieser erste Typ
kommt her. Ereignistyp ist nicht Null, dann ist dieser Ereignistyp
dieser Ereignistyp. Sehen wir uns die Verwendung an. Wenn du ganz
nach unten scrollst, ist
es wie dieser Typ hier. Mal sehen, was
in diesem Kerl passiert. Ich war hier unten. Ich suche mir einfach diesen Typen aus, um zu sehen, wie
die Veranstaltung genutzt wird. Wenn du also nach unten scrollst, C, a C, wird
dieser Ereignistyp
an diesen Typ weitergegeben und
geht dann ganz nach unten.
Ankommen und verifizieren intern. Mal sehen, was Arrive
and Verify macht, dieser interne Leitfaden, den wir
tatsächlich verwenden, mal sehen. Dann setzen wir dieses vorherige
Ergebnis auf den zweiten Punkt. Was ich
hier
eigentlich herausstellen will , ist, dass es
ein Timeout gibt , es wartet eine Weile Wenn es ihn nicht findet, dann wählst
du Ausnahme und sagst,
ich kann diesen Kerl nicht finden Ich konnte die Ereignisse
, die Sie veröffentlichen möchten, nicht finden, sodass dann tatsächlich ein Ergebnis
zurückgegeben wird. Das habe ich
versucht herauszubringen. Äh, also wenn wir das überprüfen, gibt es
hier so viele Szenarien, die tatsächlich verwendet wurden. Ich will uns nicht auf
diese vermeintlich
vereinfachte Version einlassen , also will ich uns nicht darauf
einlassen. Ordnung. Also
genau das ist passiert. Also, wenn Sie auf
diesen Ereignistyp warten, wir haben diesen Ereignistyp veröffentlicht,
sie warten darauf. Aber als es überprüft wurde, stimmte der Betrag nicht überein. Infolgedessen lösen Sie eine
Ausnahme aus. Also gut, ich denke,
wir kriegen es hin.
Okay, lassen Sie uns das wieder zum
Laufen bringen. In Ordnung. Das nächste Szenario, das
wir uns
jetzt ansehen werden, ist, wenn Sie
sich diese Tabelle ansehen, können Sie sich diese Tabelle
ansehen,
lassen Sie uns einfach herausfinden, warum dieser Typ Du darfst dir diese Tabelle ansehen. Wir haben keinen Zugriff
darauf, oder? Wir haben keinen Zugriff auf
diese Veranstaltungspublikation. Woher weiß ich das? Wenn wir nach einer Veranstaltungspublikation suchen würden, nach einer
Veranstaltungspublikation . Diese
Veranstaltungspublikation. Veröffentlichung von Veranstaltungen. Ich versuche im
Unterricht nach einer Veröffentlichung von Veranstaltungen zu suchen. Sie diese Event-Publikation sehen, würden
Sie feststellen, wenn Sie
versuchen, tatsächlich
eine Instanz zu erstellen , wo Sie keinen
Moment erstellen können. Im Grunde können Sie diesen Pfad
modellieren. Warum ist das so, wenn Sie die Implementierung
überprüfen würden. Sie sehen, dass es einen
JPA-Ereignisadapter gibt. Wenn Sie das überprüfen müssen, wenn Sie das überprüfen müssten, scrolle
ich nach unten Äh, okay, ich glaube, ich will im Grunde, lass uns
einfach in die Bibliothek gehen. Genau das wollte
ich zeigen. Lass uns gehen. Nur um ganz direkt zu
sein. Gehen wir also zu Monolith JPA,
danach suche ich. Die Monoliths JPA, ja, Moonlit API Monoliths
Events Okay, Sara JPA, tun wir das? Okay, es sollte also wahrscheinlich
Mdolit Events JPA sein. Ich glaube, das ist es, wonach
ich suche. Schauen Sie sich also die
GPA-Implementierung an. Ordnung. Jetzt sieh dir das an. Siehst du? Das ist ein Kurs, also ist er nicht öffentlich,
also ist er nicht zugänglich. Du kannst nicht darauf zugreifen. Die Art und Weise , wie es geschrieben wurde, ist also nicht zugänglich. Wenn du dir das ansiehst, ist es
auch nicht zugänglich. Siehst du, es ist nicht zugänglich. Die Art und Weise, wie es gebaut wurde, wurde nicht dafür gebaut, dass Sie Zugriff darauf
haben. Aber die Frage
wäre dann, wie habe
ich Zugriff darauf? Wie habe ich Zugriff darauf? Es gibt einige Möglichkeiten,
anstatt Zugriff darauf zu
haben, sondern so genannte
unvollständige Veranstaltungsveröffentlichung
und vollständige Veranstaltungsveröffentlichung zur Verfügung gestellt unvollständige Veranstaltungsveröffentlichung
und vollständige Veranstaltungsveröffentlichung . Lassen Sie uns das tatsächlich sehen. Lass uns das sehen,
das sehen, lass uns das sehen. Es gibt eine fertige
Veranstaltungspublikation , die Sie beurteilen können.
Diese ist verfügbar. Es gibt auch eine unvollständige Veranstaltungspublikation
, auf die Sie zugreifen können. Auch wenn sie cool sind, möchte
ich uns einen
anderen Ansatz zeigen um
diese Tabelle tatsächlich mit JPA widerzuspiegeln können wir machen. Nun, am Ende
des Tages würde ich immer noch darauf
zurückgreifen, das zu benutzen. Aber lassen Sie uns zunächst
genau sehen, wie wir diese Tabelle
widerspiegeln können. Diese Tabelle haben wir hier
in JPA gezeigt, sodass wir
vollen Zugriff darauf haben und einige
benutzerdefinierte Änderungen
daran vornehmen können vollen Zugriff darauf haben und einige
benutzerdefinierte Änderungen , wenn wir das beabsichtigen Das kommt im
nächsten Video zur Sprache. Alles klar.
26. Modell-Event-Veröffentlichungstabelle: Ordnung. Vielen
Dank, dass Sie zu mir gekommen sind. Im letzten Video haben wir
über die Modellierung der JPA-Entität gesprochen , und genau das tun
wir, oder Wir modellieren die JPA-Entität, und wie gehen wir dabei Was ich tun würde, ist, das Paket zu erstellen. Ich bin das Paket.
Wir werden es Event-Publikation
nennen. Was mache ich? Wir
werden dieses Paket nennen. Veröffentlichung der Veranstaltung. Bitte beachten Sie, dass dies kein wesentlicher Bestandteil
des Kurses
ist , aber
es ist tatsächlich so, ich möchte das nur zeigen,
damit , falls dies auch
eine Technik ist, wenn Sie arbeiten, wir versuchen,
einen neuen Dienst zu
erstellen , der
eine bestehende Datenbank widerspiegelt, dass diese Tabelle oder wahrscheinlich
der Dienst, den Sie erstellt haben, die
Datenbanktabelle nicht dass diese Tabelle oder wahrscheinlich
der Dienst, den Sie
erstellt haben, die
Datenbanktabelle nicht von Grund auf neu erstellt hat, ist auch eine Möglichkeit, mach es. Das
versuche ich hier zu zeigen. Wenn man es kritisch betrachtet, sieht
man die Säulen, hier sind die
Säulen, man muss tatsächlich
genau den gleichen Spiegel erstellen. Das ist es also, was wir tun
werden. Um Verwirrung zu vermeiden. Um Verwirrung zu vermeiden, werde
ich das
als Brauch bezeichnen. Benutzerdefinierte Veranstaltungspublikation,
Benutzerdefinierte Veranstaltungsveröffentlichung. Verwenden Sie dieses Mal
auch unseren Ga, den Sear-Setter, dann verwenden
wir eine To-Zeichenfolge
, falls Sie sie benötigen,
dann, um eine
Entität zu erhalten, dann eine Tabelle In dieser Tabelle würde ich sicherstellen , dass sie dem
Namen dieser Tabelle entspricht Das wird ein Ereignis sein, das die Veröffentlichung
unterstreichen wird. Stimmt. Nun, um dann sicherzustellen, dass
diese Dinge gleich sind. Nun, wenn Sie sich
die ID genau ansehen, wenn wir sie
hier zeigen, ist die ID eine UUID Es ist nicht lang oder es ist eine UID, also müssen wir das auch sicherstellen Wir haben eine private
UUID-ID, oder? Dann müssen wir das überprüfen. Bringen wir es einfach manuell rein. Das sollten Eingaben,
Eingaben , Java, T, UUID Dann haben wir auch die
nächste ist die Listener-ID. Wir haben Daten zur
Vervollständigung der Listener-ID Lassen Sie uns einfach alles eintippen Private private Zeichenfolge,
Listen-ID. Denken Sie daran, das würde eigentlich in einen Listener
übersetzt
werden, der ID heißt, also ist es gut, es so
zu belassen Dann haben wir den Typ private
Veranstaltungen. Art der Veranstaltung. Dies
wird in den
Unterstrichtyp „Ereignis“ übersetzt Unterstrichtyp „Ereignis Dann haben wir eine private Zeichenfolge. Dann sind das serialisierte
serialisierte Ereignisse. Denken Sie daran, in
serialisierte Unterstrich-Ereignisse übersetzt zu werden.
Dann haben wir privat Also, das ist ein Zeitstempel. Also warum Postgress, wir verwenden
einfach
dasselbe, Dann heißt das
Veröffentlichungsdatum. Sogenannte Veröffentlichungstermine,
Veröffentlichungstermine. Stimmt. Schließlich haben wir auch
Fertigstellungstermine. Also verpasse das hier.
Datum der Fertigstellung. Dieser Typ sagt: Hey, ich verstehe nicht, dass ich den Ausweis brauche. Art von ID-Attributen? Wie willst du es zu einem primären C
machen? Ich gebe Ihnen die ID-Attribute
der Jakarta-Persistenz,
dann verwenden wir den generierten Wert, um einfach die Strategie widerzuspiegeln, und
dann den generierten Typ
generieren den Identitätstyp Nein, nein, nein, UID, tut mir leid. Aber ich verwende UID. Das spiegelt es
im Grunde nur wider Du generierst nicht
, weil du
von hier aus nie etwas direkt erstellen
wirst, oder? Also sollte die ID
wahrscheinlich einfach ausreichen. Darin können wir das
wiedergeben. Dann können Sie dann das Repository,
das Repository, erstellen. Die Frage, die wir uns stellen
sollten, lautet: Wie identifizieren wir, wie
identifizieren wir ein abgeschlossenes Ereignis? Ein abgeschlossenes Ereignis
ist ein Ereignis, das ein Abschlussdatum
hat, nicht ein Nulldatum. Warum
muss bei einem unvollständigen Ereignis das
Abschlussdatum Null sein? Genau das werden
wir hier tun. Gehen wir zur Prozedur. Nennen wir es benutzerdefinierte Ereignisse. Ereignisse, Veröffentlichung, Repositorium. Dann dehnt sich aus. Nein, ich will Crunch Ich erkläre, warum ich
JPA nicht verwende, es sei denn, es ist notwendig. Sollte immer das verwenden, was Sie brauchen. Benutze nicht alles. Die Verwendung von JPA bringt zu viele
Dinge mit sich, oder? Außer du willst das
Paging und den Sting, du willst die anderen Dinge
, die dir tatsächlich einbringen. Dann möchte ich
daraus ein Repositorium machen. Dann würde ich eine
Listenliste, benutzerdefinierte Ereignisse, Liste verwenden. Mir geht es
aber nicht gut. Dieses Mal verwende
ich ein Zelt, um benutzerdefinierte
Ereignisse zu erstellen, benutzerdefinierte Ereignisse zu erstellen, bis dahin benutzerdefinierte Ereignisse
nach Veröffentlichungsdaten, nach Veröffentlichungsdaten,
nein, nein, nein, Veröffentlichung. Wahrscheinlich sind
Veröffentlichungsdaten, äh, nicht Null, nicht Null, und Fertigstellungstermine, Abschlussdaten und
Abschlussdaten sind Null. Ist Null. Was bedeutet das? Wenn
das
uns bekannte Veröffentlichungsdatum nie bekannt ist und das
Abschlussdatum nein, bedeutet das automatisch , dass
es sich bei dieser Liste um eine
Liste unvollständiger Ereignisse handelt. Bei den abgeschlossenen Veranstaltungen machen
wir einfach dasselbe, aber dieses Mal ist es das, was
dieser Typ nicht weiß. Und so ist es. Das ist es. Wenn du es brauchst, sieht es
genau so aus. So sieht es im Grunde aus. Wenn Sie dann, sagen
wir, eine Schnittstelle erstellen möchten, erstellen Sie einfach einen Service,
Sie spiegeln diese
beiden einfach wider, und das funktioniert Wir erstellen einfach eine
Schnittstelle, eine Schnittstelle. Ich nenne es einfach benutzerdefinierte
Ereignisse, Veröffentlichung, Service. Das wird mir zwei Dinge geben. Ich habe zwei Unterschriften. Nummer eins wird eine Liste der Veröffentlichungen von Veranstaltungen sein,
benutzerdefinierte Veröffentlichungen. Aber dieses Mal
nenne ich es „Es
wird abgeschlossen “ und es werden abgeschlossene Veröffentlichungen zu
Veranstaltungen abgeschlossen. Dann werden die anderen
Veranstaltungspublikationen fertiggestellt. Im Grunde ist es das. Dann lassen Sie uns einfach die Implementierung erstellen. Implementierung, es werden
benutzerdefinierte Ereignisse veröffentlicht, Service Inp, dann
implementieren wir einfach diesen Typen, machen es bei Service at
Service bei Reps bei
Bedarf als Dann bringen wir einfach diesen Typen rein, lassen Sie uns die Methoden implementieren, dann lassen wir
das private Finale einbinden,
dann haben wir kundenspezifisch angenommen, dass dieser Typ einfach
reinkommt
und uns die
Punkte gibt, wenn alles erledigt Dann ist dieser Typ fertig.
Das ist nicht bekannt. Das funktioniert. Ein gutes Testszenario
wäre eine
Bonitätsprüfung. Lassen Sie uns einfach überprüfen,
ob das, was wir getan haben,
korrekt ist oder ob diese korrekt sind.
Lassen Sie uns Ihre Kreditwürdigkeit testen. Nennen wir es benutzerdefinierte
Ereignisse, benutzerdefiniertes Ereignis. Nennen wir es einfach
Event-Publikation , weil es sich
anscheinend um die Veröffentlichung von Ereignissen und
Integrationstests handelt. Integrationstest. Okay? Ja, das ist es, was wir brauchen. Denken Sie daran, wir müssen genau das
tun, was wir tun werden, damit wir nicht
wirklich auf Probleme stoßen. Nummer eins, ich möchte das Anwendungsmodell testen. Dann habe ich Abhängigkeiten? Ich glaube nicht, dass ich
momentan welche habe. Ich habe keine Abhängigkeiten. Dann verbinden wir uns mit Auto Wired und dann mit Custom Event Service. Dann lassen Sie uns die Tests für beide für diese beiden Typen durchführen. Dann
rufen wir den ersten an. Holen Sie sich eine unvollständige Veröffentlichung der
Veranstaltung. Die Publikation. Das tut
mir leid, Leute. Das war nur ein
Anruf auf meinem Handy. Ordnung. In Ordnung, also lass uns das untersuchen. In Ordnung, also
Veröffentlichungstests, richtig? Alles okay. Das funktioniert. Das nennst du einfach nichtig. Dann Tests. Dann nimm das einfach und bring
dann diesen Kerl rein. Dann rufen wir den Service an. Das wird dann
alles in Ordnung. Dann wollen wir ein paar Details
herausfinden, machen
einfach unvollendet das Unvollendete
,
dann machen wir Unvollendet dann machen wir Dann für jeden, nur für jeden. Aber jedes der
unvollendeten Ereignisse nenne es Ereignis Dann lassen Sie uns einfach
einige Details klarstellen. Sollte funktionieren, damit wir direkt
investieren können. Wir können Assets, dass ich gesagt habe
, dass dieses Ereignis dieses Ereignis ist, C behaupten, dass die Ereignisse
Dieses Ereignis eine Instanz ist, Recht auf benutzerdefinierte
Event-Publikation Punktklasse. Ja, wir werden
das zeigen. Dann können
wir auch behaupten,
dass das Ereignis, das
Ereignis, das Abschlussdatum hat. Wir sind sicher, dass diese Termine
bis zur Fertigstellung haben, Inu INO. Ist Null. Wow, wenn das funktioniert. Das ist auch ein Test
für den anderen Kerl. Ich wähle das einfach aus und
ändere nur ein
paar Tests und es wird in der Webpublikation
fertiggestellt. Es ist also abgeschlossen,
abgeschlossene Ereignisse. Dies ist auch ein Moment, aber das ist nicht
Null, ist nicht Null. Wir zeigen auch für beide. Dies sollte ein ausreichender Test , um diesen Kerl
beurteilen zu können. Lass uns diesen Test
machen und mal sehen. Hoffentlich
haben wir kein Problem. Lass es uns laufen lassen, mal
sehen, was passiert. Ich werde es durchziehen, China, Chinesisches Meer, Chinesisches Meer. Sind wir in der Lage,
das erfolgreich zu tun? Der erste Pass. Das Problem, das wir haben, ist der abgeschlossene Test. Was ist das Problem mit
dem abgeschlossenen Test? Aktuell ist nicht bekannt. Entschuldigung,
Fertigstellungsdatum. Lass uns sehen. Sorry, das sollte
abgeschlossen sein, das Problem ist abgeschlossen. Lassen Sie uns den gesamten Test durchführen. Das bezieht sich auf den gesamten
Test, den wir abgeschlossen haben, er sollte abgeschlossen sein
, das sollte stimmen. Sollte in der Lage sein, alles
wahr zu
machen und es sollte funktionieren. Das sind die Übel des
Kopierens und Einfügens. Leute kopieren und einfügen nicht. Also vollständiger Test, was ist
das Problem damit? Ich erwarte, dass der tatsächliche Wert nicht Null ist, aber das ist bekannt,
oder ist das Null? Abschlussdatum ist nicht Null.
Dessen sind wir uns sehr sicher. Lassen Sie mich zu dem zurückkehren,
was ich hier getan habe,
Fertigstellung, lassen Sie uns hier programmieren. Haben wir die Veranstaltung erhalten? Das
Veröffentlichungsdatum ist nicht Null und das
Abschlussdatum ist nicht bekannt. Das ist das Problem
hier, ist nicht bekannt. Die Übel des Kopierens und Einfügens. Macht teilen heißt
das. Es ist nicht Null. Also, da du
von der Position kommst müssen wir in den Sprung springen,
wo wir keinen Schnee bekommen,
so sollte ich benutzt werden Okay, also ich glaube, ich wähle immer noch
das Falsche. Das ist nicht Null. Mm hmm. Ja, ja Ja, genau das
sollte ich mir aussuchen. Das war also das Problem dort. Also gut, lass uns
das nochmal machen. Ordnung. Lass uns sehen. Hoffentlich habe ich keinen
Tippfehler gemacht oder wahrscheinlich irgendwo mehr
das Falsche ausgewählt weil es
im Grunde funktionieren sollte Ordnung. Siehst du,
führe das aus, führe das aus. Ja, wir können das
abschließen. In Ordnung. Also können wir
diese Phase abschließen, um genau zu sehen, wie wir das machen. Ich werde das verwenden, um zwei verschiedene Probleme zu lösen. Wir haben für
andere Integrationen
auch einen Platz in der Publikationstabelle „Ich nenne
dieses Modell“ für
Veröffentlichungen erstellt auch einen Platz in der Publikationstabelle „Ich nenne . Was ist also verfügbar? Denkt daran, dass ich es erwähnt habe,
Leute, im Grunde könnt ihr damit aufhören. Sie können in der
Öffentlichkeit nach Ereignissen suchen, um die abgeschlossenen
Ereignisse zu überwachen, d. h. nicht berechnete Ereignisse Tatsächlich können Sie sogar viel mehr
bekommen. Ich wollte es nur nicht
vorhin erwähnen. Was sind die zusätzlichen
TS, die du bekommen kannst? Die zusätzlichen TS, die du bekommen kannst,
erinnere dich daran, du kennst sie alle. Sie kennen sich mit jedem aus. Was ist die Zuhörer-ID? Das ist der
Ereignistyp, tut mir leid, Ereignis. Der Ereignistyp ist immer der kanonische
Name des Ereignisses, das Sie senden möchten, oder des Ereignisses, das
Sie senden möchten Also diese kanonischen C-Namen, du solltest wissen, oh,
das ist der andere raus Wenn Sie mehrere hatten, können
Sie abfragen, welche
Sie senden möchten Nehmen wir an, Sie haben
eine Liste von E-Mails, eine Liste von E-Mails, die Sie
tatsächlich versenden. Aber wie auch immer es sich anfühlt, oder? Sie können einfach nach den
E-Mails filtern, dann haben wir sie gesendet, und die Ereignisse werden tatsächlich mit den beiden Methoden, die
ich bereits erwähnt habe,
erneut gesendet, die unvollständigen
Veranstaltungspublikationen und die abgeschlossene
Veranstaltungsveröffentlichung Sie können beide verwenden werden wir im nächsten Video mehr sehen,
oder sollte ich sagen, in den nachfolgenden Videos weil wir das auf jeden Fall untersuchen
werden A für dieses Video, lassen Sie uns das schnell bestätigen. Lassen Sie uns das schnell festschreiben. Bestätigen Sie AM. Dann sagen wir
einfach Kreation
oder Kreation oder Integrationstest, dann veröffentlichen wir zehn und dann haben wir Modellereignissen
modelliert Tabelle mit Hinweisen. Damit ist 11 geschlossen. Ordnung. Ich finde
das gut. In Ordnung. Ich beende das Video einfach hier
und bis wir zurück sind, werde
ich es so verschieben, dass die Redeposit
euch im nächsten Video wiedersehen
27. Ereignisaktion: Hallo Leute, danke, dass ihr
zu mir zurückgekommen seid. Hier ist Z. Ja. Ich möchte in diesem Video
ein sehr einzigartiges Szenario dessen besprechen ein sehr einzigartiges Szenario dessen ,
was Sie
bauen werden. Dieses Video wird tatsächlich ein sehr einzigartiges Szenario
haben. Denken Sie daran, dass wir, während
wir
versuchen,
das andere Ereignis zu erstellen , ein DTO namens
O Payment Dt erstellt
haben Nehmen wir nun an, wir haben andere Implementierungen
oder andere Ereignisse, was
angesichts eines weiteren Ereignisses, nämlich des E-Mail-Ereignisses
, beträchtlich wäre angesichts eines weiteren Ereignisses, nämlich des E-Mail-Ereignisses
, des E-Mail-Ereignisses
, Wir haben also eine weitere Veranstaltung. Nun, das Szenario sieht im
Grunde so aus, dass wir uns diese Tabelle
ansehen, wenn wir uns die Tabelle mit der
Veröffentlichung der Ereignisse
ansehen, wir wissen, dass sie
tatsächlich unter
dem kanonischen Namen,
nach dem kanonischen Namen gefunden wird dem kanonischen Namen,
nach dem kanonischen Namen Was ist, wenn wir eine
Art der Sortierung haben? Wir haben eine Art zu
sortieren. Wir können die Ereignisse identifizieren, die wir gesendet haben, und wir können wahrscheinlich
eine UM verwenden, um zu identifizieren, dass
für jedes Ereignis Typ E-Mail entspricht, oder für jedes
Ereignis, das vom Typ ist,
die andere Zahlungs-DTO,
ich möchte, dass die andere Zahlungs-DTO,
ich möchte, Sie es
für das Feldereignis erneut versuchen Ich kann Ihnen
dieses Szenario vorstellen? Dieses Szenario
wird also erforscht. Es bedeutet, dass wir in der Lage
sein müssen, gleichzeitig eine
um zu erstellen , sie tatsächlich zu
verknüpfen, um eine um zu erstellen, sie
dann mit dem kanonischen
Namen dieses Ereignisses verknüpfen müssen Dann können wir das abrufen. Es kann eine Cache-Tabelle sein.
Das können wir dann abrufen. Verwenden Sie das dann, um dieses Handbuch
abzufragen, oder Sie
verwenden es dann und geben das unvollständige Ereignis , um etwas Arbeit erledigen zu können.
Was versuche ich zu sagen? Siehst du, dieses Szenario kommt
auf uns zu, wenn wir das untersuchen würden, lass uns zu dem anderen Dienst übergehen. Lassen Sie uns das einfach untersuchen. Lassen Sie uns diese
beiden Schnittstellen untersuchen. Dann verstehst du besser,
was ich herausbringen will. Nehmen wir an, der Code ist endgültig. Das sind abgeschlossene
Event-Publikationen, abgeschlossene Veranstaltungspublikationen. Dann haben wir die andere
Variante, die anderen Varianten, nämlich die Veranstaltungspublikation, die
unvollständige
Veranstaltungspublikation . Unvollständige Veröffentlichung der Veranstaltung. Sehen Sie sich nun an, dass die unvollständige
Veranstaltungspublikation etwas sehr Einzigartiges enthält. Siehst du? Es
nimmt tatsächlich ein Prädikat Sie können ein Prädikat übergeben. Das heißt, wir können beschließen,
dieses Prädikat zu sagen , wir wollen, dass dieses
Prädikat Wir wollen, dass es vom Typ ist. Wir würden
den Ereignistyp überprüfen , um
sicherzugehen, dass der Ereignistyp tatsächlich mit
dem kanonischen Namen
der Ereignisse übereinstimmt , die wir senden, richtig? Ich weiß also, dass das etwas
komplex sein könnte , was ich
zu erklären versuche, oder Aber ich wollte nur einen Hintergrund
geben während wir mit dem Code beginnen. Das könnte also ein ziemlich
relativ langes Video sein, oder? Wir können das also tatsächlich
auf einmal erledigen. Oh, wenn wir einen
sehr guten Meilenstein finden um das Video zu beenden, dann machen wir mit
dem nächsten weiter. Ordnung, lasst uns schnell
loslegen, Leute, und lasst uns das tatsächlich
zum Laufen bringen, oder? Es ist ein unglaublich
cooles Zeug, oder? Lassen Sie uns dafür sorgen
, dass es funktioniert, denn es wird eine sehr nette
Implementierung sein. In Ordnung. Zunächst würde ich
damit beginnen,
ich würde ein Paket erstellen, ein Paket namens Event Action, ein Paket namens Event Action weil wir
die Ereignisse ins Visier nehmen, oder? Die Event-Aktion. Dann würde ich tatsächlich eine Tabelle
erstellen, in der ich
speichern werde . Ich habe eine Tabelle
namens Event Action. Wir werden
den Link speichern , der den Link
zwischen den Aktionstypen speichert
, also e. Denken Sie daran, dass der Aktionstyp im Grunde
die Ereignisse
sein wird, die wir gesendet haben, entweder E-Mail-Ereignisse oder
andere Zahlungsereignisse oder
andere Ereignisse wie Ereignisse, die
eher proportional sind,
sollte ich sagen, dass sie sich direkt
auf den kanonischen
Namen dieses Ereignisses andere Ereignisse wie Ereignisse, die
eher proportional sind,
sollte ich sagen, beziehen dass sie sich direkt
auf den kanonischen
Namen dieses Ereignisses Auf diese Weise können
wir, wenn wir den Ereignistyp ermitteln können, einfach den kanonischen
Namen aus der Datenbank abrufen, und dann können wir ihn als Prädikat
in der unvollständigen Publikation
verwenden , die
unvollständige Ereignisveröffentlichung, dann kann
ich das fehlgeschlagene Ereignis tatsächlich
auslösen. Wow, das wird interessant sein. In Ordnung, lass uns das machen. Das ist eine Entität, eine Einheit, bei Gea at ce, warum sage ich Service Ein Tisch mit Eis. Mich
interessieren nur die Indizes. Indizes, ich komme gleich
wieder hierher. Einfach schnell spiegeln, einfach schnell diese ID wie gewohnt
erstellen, dann wird es
ein generierter Wert sein. Dann
wird die Strategie für uns ID sein. Eine Identität, ich meine
Identität. Dann verwenden wir eine
lange, eine
lange, lange, dann
verwenden wir eine private Aktion. Wir werden
die Aktion gleich definieren. Dann wäre
die Länge bei Spalte um Spalte nur zwei. Die Länge wird zwei,
zwei sein. Es ist in Ordnung. Denn denken Sie daran, dass wir
aufgrund der von uns erstellten Namen die Möglichkeit hatten, einen Typkonverter zu
verwenden
, den ich in
den vorherigen Videos tatsächlich gezeigt habe, oder? Dann privat, dann nenne
ich diese Zeichenfolge. Nennen wir es Event. Kanonischer Name. Kanonischer Name ist das. Das ist der konische Name. Der kanonische Name ist
der vollständige Caronica-Name, und das ist genau das, was
eigentlich herauskommen will . In Ordnung. Also eine Kolumne, dann nennen wir das, anscheinend sollten beide nicht falsch heißen,
das ist dieser eine Name Nennen wir den Namen Yvette Can, YvetTK .
Das ist in Ordnung. Das haben wir jetzt erstellt. Dann wollen wir ein
Unterpaket namens Action erstellen. Diese Aktion würde nicht enthalten würde dann die
Aktionsklasse enthalten, für die wir eine Aktion benötigen, wäre dann eine um, eine
Aufzählung,
dann anscheinend ein OLAx-Konstruktor und ein Vorerst werden wir uns also mit der Bezahlung befassen, mit
den Zahlungen. Also die Zahlungen, nenne es P, dann die E-Mail-E-Mail, nenne den Code E, richtig? Genau wie bei der
Erstellung all der Ereignisse,
all der Zahlen, haben wir Zeichenkettencode
benutzt Kode. Dann ja. Ich möchte
hier
eine spezielle Methode für uns entwickeln , um
etwas sehr Cooles zu bekommen. Nennen wir das öffentlich.
Ich weiß nicht, ob wir einen italienischen Namen brauchen werden
, aber lassen Sie uns ihn uns einfach besorgen. Bestimme die Handlung wahrscheinlich beim Namen. Übergeben des endgültigen
Zeichenkettennamens in einem Zeichenkettennamen. Dann geben wir Stream,
Dottream, dann
Aktionswerte, die Werte,
Aktion auf die Werte, dann den Filter, dann
die Aktion, dann den Aktionspunktname Punkt
gleich IgnokAse, dann übergeben wir diesen Namen, den wir tatsächlich erhalten haben übergeben wir diesen Namen, den wir tatsächlich erhalten Dann finden wir zuerst, finden
zuerst,
oder ich weiß, richtig, Ar, nennen
wir Okay, versteh den Unterschied, richtig? Der Code, das ist der Code. Der Name ist das,
das ist der Name. Wenn du es machst,
um auf eine Zahl zu setzen, oder wenn du einen Namen machst,
bekommst du das. Aber der Code ist so, also gibt es einen Unterschied, es gibt
einen Unterschied. Ich will das, nicht das. Ordnung. Lassen Sie uns
den Typkonverter erstellen. Entschuldigung, ich habe die
Credits darin verdient. Lassen Sie uns den Typkonverter erstellen. Nennen wir ihn Action
Action Converter. Danke, du nennst
es einfach Typ. Es ist in Ordnung. Es ist in Ordnung als Action,
weil ich
mehrere Dinge
damit machen möchte, oder? Lassen Sie uns den
Aktionskonverter erstellen. Offenbar wissen wir, dass er tatsächlich implementiert
wird , um den
Attributkonverter zu implementieren. Hier ein Attributkonverter, dann tun
wir das, damit wir keine Notation eingeben
müssen. Also einfach Auto apply auf true setzen, dann bekommen wir das und anscheinend haben wir genau das. Dann mach das einfach zu einer einfachen
I-Aktion. Das ist Action. Aktion. Wenn die Aktion nicht Null ist. Oder wenn die Aktion Null ist, je nachdem, welche Aktion funktioniert,
Null ist, füllen Sie sie einfach zuerst nach Stimmt. Eine neue Laufzeitausnahme würde sich erst später ändern? Wenn wir tatsächlich anfangen, uns mit Ausnahmen zu
befassen, würde
das dann richtig funktionieren. Dann ist diese Aktion Null, und wenn nicht, dann drehen wir uns um. Aktion Uh huh, Code holen, richtig? Ja, das ist der Code. Also werden wir
den Code auf der DVD verwenden. Dann tun wir dafür
dasselbe und sagen, ich codiere. Also die Leute von Bell Me haben
erwähnt, dass das
ein relativ langes Video sein würde , oder wir suchen einfach nach
einem guten Meilenstein. Dann ist es nicht so, dass sie einen Rennstream
machen, dann Aktionswerte, die Werte. Uh huh, Punktfilter, kein Filter, Filter, die
Aktion, dann Aktion Aktion wird gut, das ist gleich,
kann Groß- und Kleinschreibung signalisieren oder ist einfach
gleich gleich Dann zuerst in Ordnung oder sonst wahr. Zuerst in Ordnung oder sonst,
wahr. Einmal. Aktion nicht gefunden. Das
ist in Ordnung. In Ordnung. Gute Fortschritte machen, gute
Fortschritte machen. Wir haben sehr gute
Sachen gemacht, sehr gute Sachen. Nun, wie identifizieren wir welches Ereignis? Wie
verknüpfen wir diese Ereignisaktion diesem Ereignis? DTO oder andere Details können
erstellt werden , andere
Ereignisdetails werden erstellt Ich möchte zur Laufzeit
oder beim Start in der Lage sein, zu
verlinken. Ich möchte in der
Lage sein, diesen
harmonischen Namen dynamisch abzurufen Ich möchte keine manuelle
Arbeit machen, es sollte dynamisch sein. Ich werde einen Marker erstellen. Ich werde einen benutzerdefinierten Packer erstellen. Nennen wir es benutzerdefinierte Markierung. Erstellen Sie einfach eine benutzerdefinierte
Event-Markierung, oder? Wenn Sie
mit dem Erstellen von
benutzerdefinierten Validierungen
in Spring Boots vertraut
sind , versuche
ich genau
das zu Verwenden Sie dieses Mal
eine Benutzeroberfläche für Kunst. An der Schnittstelle. An der Schnittstelle benutzt du
dann das Wort
dokumentiert bei Zielen, Zielen. Auf welchen Zieltyp
zielen wir nun ab? Ein Targeting-Typ,
dann eine Art mit Spannung. Worauf zielen wir dann ab?
Laufzeit. Wir wollen, dass es eine Laufzeitrichtlinie ist. Das funktioniert, also
kann ich das einfach machen. Ich glaube, ich bevorzuge das. Uh,
es gibt so viele von ihnen. Ich glaube, ich bin nur statische
Methode. Statische Methode. Postische Methode. Ich habe so viele Typen. Ich werde nach C suchen. Ordnung, ich schätze, ich gehe
einfach zu den Formularen. Es sollte Java
Lung und dann Elementtyp sein. Ich möchte nur
den Typ hier platzieren. Wenn ich das entferne, ja, ich entferne das und ich sage
nur Elemente, dann Typ Punkt, der funktionieren
sollte, das sollte funktionieren. Ordnung. Äh, alles klar. In Ordnung, das funktioniert also. Also nur um den
Elementtyp zu platzieren, den Typ hier, und das sollte funktionieren.
Richtig? Das sollte funktionieren. Warum ist es nicht in Ordnung darin? Lass uns sehen. Findet keine. Sehen wir uns die Eingaben, Java, Long, Notation, Elementtyp, Typ an. Okay. Also wie dem auch sei, da wir das
schon haben, benutze es einfach. Ich wollte einfach den
Typ Elementtyp oder den Typ verlassen. Dies ist im Grunde eine benutzerdefinierte
Option, wenn Sie
eine benutzerdefinierte Validierung erstellen möchten. Ich könnte sagen, woher
wusste ich das? Schauen wir uns den Controller
an,
Controller . Wenn du dir den Controller der Jungs ansiehst
, sehe
ich, er hat im Grunde
das Gleiche. Es ist im Grunde dasselbe. Es hat also dasselbe, weshalb
die Komponenten in Springbook nicht
scannen können, um es wissen zu können.
Das ist auch eine
Komponente, weil
die Wurzel all dieser Typen darin besteht,
dass sie alle Komponenten sind Du überprüfst den
Controller, siehst du? Komponenten. Das sind
alles Komponenten. Es ist in der Lage, nach Komponenten zu
suchen. Es sind also Komponenten, nach denen es sucht. Also bei Controller
at Service at Posit sind
all diese Typen quasi sind
all diese Typen quasi die Komponente im
Hintergrund, oder? Lassen Sie uns auch das Repository erkunden. Siehst du? Das ist unsere
Komponentenkomponente, das Bagram, wenn Sie
den Komponentenscan laufen lassen, es sucht einfach nach allem
, was die Komponente tatsächlich enthält Also das Gleiche, was ich hier eigentlich erreichen
will, oder? Also mach das wirklich
, damit wir tatsächlich scannen. Aber dieses Mal
werden wir das Scannen machen. Wir werden
den Code schreiben, den wir
durchscannen müssen, um ihn selbst zu finden. Ordnung. Also haben wir das. Dann möchte ich eine Klage einreichen, richtig? Es ist dieselbe Aktion. Die
gleiche Aktion, ähm, richtig? Ich nenne es Event
Action. Aktion zum Ereignis. Ja. Also das ist der benutzerdefinierte
Marker, den ich erstellen möchte. Dann wähle ich diese
benutzerdefinierte Markierung aus. Ich wähle den benutzerdefinierten Marker. Dann wähle ich
die benutzerdefinierte Markierung aus, dann gehe ich zu meinem
anderen Zahlungs-DTU dann vermarkte ich, richtig Ich werde vermarkten. Dann
kann ich jetzt üben. Fantastisch. Ich kann jetzt üben.
Und wie Sie sehen, haben
wir das Event
Action Event Action. Dann möchte ich, dass
es Aktionszahlungen sind. Das heißt, das ist ein Ereignis, das für Zahlungen
ausgelöst wird. Wenn wir uns jetzt E-Mails
ansehen, machen wir dasselbe, aber dieses Mal werde ich
wahrscheinlich für E-Mails sein. In Ordnung. Also, jetzt, wo wir das getan haben, ist das genug, um es
ausfindig zu machen? Nein, wir sind noch nicht fertig. Wir erinnern uns, dass wir das
alles erstellt haben und es ist eine
benutzerdefinierte Implementierung, also müssen wir tatsächlich den
gesamten benutzerdefinierten Code dafür erstellen. Also gut, bevor wir weitermachen, lassen Sie uns schnell
das Repository erstellen das wir hier brauchen, das Repository für diesen Typen,
richtig? Archiv für Ereignisse. Ereignisse, Ereignisse, Aktion,
epoctent Action Epoct. Dann verlängern, ich glaube, wir beenden
das Video einfach danach, damit wir es konsumieren
können und der Dann ist es lang, es ist lang. Dann heißt es Epocty, es
sollte eine Schnittstelle geben. Schnittstelle. Wir sind eine Schnittstelle. Dann denke ich, Moline
braucht nur einen Typen , der nur eine optionale,
optionale Event-Aktion Also ich finde das nicht,
ich brauche eine benutzerdefinierte, da wir Aktion für Aktion von
Ereignis zu Ereignis bekommen Ja, genau das brauche
ich. Dann sollte es Action Action sein. Ordnung. Also, ich denke wir haben hier einen
guten Meilenstein erreicht. Also, das wird wirklich,
wirklich saftig, Leute. Lassen Sie uns im
nächsten Video zurückkommen, um weitere Informationen zu finden und weitere
Implementierungen vorzunehmen. Danke, Leute.
Ich sehe das nächste Video.
28. Ereignisaktion 2: In Ordnung Leute, danke, dass ihr wieder
zu mir gekommen seid. Das ist Z hier. Wir haben tatsächlich aufgehört, als wir
versuchten, die Ereignisaktion zu definieren. Wenn Sie sich das letzte Video tatsächlich
ansehen, schauen Sie sich
bitte das letzte
Video an, denn das würde genau
erklären, was wir hier erreichen
wollen. Wir fahren einfach mit dem Setup fort. Lassen Sie uns ein benutzerdefiniertes Setup, ein benutzerdefiniertes Setup, ein benutzerdefiniertes Setup erstellen. Also eine benutzerdefinierte Setup-Datei, oder? Dies würde im Grunde
einen Anwendungsläufer implementieren. Sie können
eine Anwendung implementieren. Application Runner Application
Runner funktioniert auf die gleiche Weise. Application Runner
funktioniert genauso, ein Befehlszeilen-Runner funktioniert. Sie können ihn dann Complication
Runner Line Runner verwenden. Wir machen dasselbe, was als Konstruktor
erforderlich ist. Lassen Sie uns den Runner implementieren. Application Runner, dann
werde ich das private
I just private Event-Repository und dann das Repository hinzufügen. Ordnung. Also, was
versuchen wir hier zu erreichen? Okay, also lasst uns
mir im Detail folgen,
Leute, dann würden wir hier
ein paar coole Sachen machen. Jetzt würden wir die Anbieter
durchsuchen, die Anbieter durchsuchen
oder im Grunde Code schreiben. Um nach einer Klasse zu suchen, die diese benutzerdefinierte Markierung
hat. Suchen Sie nach jeder Klasse, die ihre benutzerdefinierte Markierung
hat. Wenn wir die Klasse finden, die ihre benutzerdefinierte Markierung
hat, dann würden wir eigentlich jede von ihnen
auswählen, den kanonischen Namen ermitteln,
dann verknüpfen, diesen Aktionstyp, den Aktionstyp
dieser benutzerdefinierten Markierung und
dann mit
dem kanonischen Namen
in die Tabelle, die wir erstellt haben, verknüpfen dieser benutzerdefinierten Markierung und
dann mit
dem kanonischen Namen
in die Tabelle, dann mit
dem kanonischen Namen
in die die Das wollen wir hier erreichen
, Leute. Das wollen
wir im Grunde erreichen. Zunächst verwenden Sie den Anbieter für das Scannen
von Klassenteilen. Ja, ich nehme
diesen Typen , dann
Anbieter oder Callicanna Ich glaube, ich mag den Anbieter besser Anbieter
Danke Dies sollte unsere benutzerdefinierte
Event-Marker-Klasse sein. Nun, das ist es, wonach
wir suchen. Wir filtern nach
diesem bestimmten Typen. Dann erstellen wir einen Satz von Bin-Definitionen, weil es
offenbar
darum daraus eine Bin-Definition
zu machen. Wir haben eine Bin-Definition. Nennen wir es Bin-Definition, lassen Sie uns Bind nennen. Dann
wählen wir den Anbieter aus, dann finden wir ihn innerhalb einer Reihe
von Paketen oder Paketen. Wie lautet der Name des
Pakets, auf dem Sie laufen? Du läufst auf Come Z, Spring Mod kostet das, was
wir brauchen, klick auf diesen Typen. Ja, das brauche ich.
Ja, Spring moduliere Cos Alle kommen irgendwohin, Leute. Alles klar, gehen wir runter. Dann schauen wir nach dir. Schauen wir uns deine
Strahldefinition an, Bin-Definition. Das ist cool. Definition von Mülltonnen. Dann prüfen wir, ob es sich bei
der Bin-Definition eine Instanz einer mit Anmerkungen versehenen
Wesensdefinition Denken Sie daran,
dass wir diese Anmerkung verwenden. Also, wenn es sich um eine Definition von
annotiertem Wesen handelt, ähm, was folgen wir dann Erinnern
wir uns an diesen Typen, nennen wir dieses Set, also machen wir es zu
einem Bind. Wenn ja, dann nennen wir die Map Die Map Zeichenkettenobjekte. Objekten eine Zeichenfolge zu und nennen Sie es dann notiertes Attribut, denn das ist der Akt, den wir untersuchen
, nicht wahr? Nennen wir es sollte sein, es sollte notiert
sein Definition sein.
Definition sein. Dann casten wir es tatsächlich. Wir casten es. Hier, das nennen
wir es im Grunde und. Nennen wir es einmal die
Attributtabelle Attribute. Atchfootmap. Ich weiß,
das mag ein bisschen neu erscheinen, aber Sie würden sagen, was
Sie erreichen wollen Dann bekommen wir die Metadaten. Dann bekommt Dots die annotierten Attribute,
kommentierte Übergeben Sie dann das Binning, bei die benutzerdefinierte
Markierung oder Klasse handelt Dann erhält Punkt einen kanonischen Namen. Ich glaube, das
macht jetzt Sinn, Leute. Es bekommt den kanonischen Namen. Jetzt, wo ich
den kanonischen Namen habe, müssen
wir alle
Details in
einer Karte speichern, weil wir
alles innerhalb einer Karte benötigen Dies ist eine Karte aus
Zeichenfolge und Zeichenfolge. Zeichenkette, nenne sie Event
Action Map, eine neue Hash-Map. Das ist also erledigt. Das haben wir erreicht. Sie wählen dann die Karte
der Ereignisse aus. Punkte setzen und dann die
jährliche Karte eintragen, die wir
bekommen haben . Dots
bekommt Event Action Sie fragen sich, woher diese
Event-Aktion kommt. Das ist Das
kommt von hier. Wo ist es nochmal? Hier. Entschuldigung, hier, Event Action. Sie suchen innerhalb der
benutzerdefinierten Markierungsklasse, Sie suchen nach diesem Namen, dem
Feld, das diesen Namen hat. Und genau das
brauchen wir. Also sucht es danach. Dann, nachdem wir das bekommen haben, verschieben
wir es nach Tostring. ToString. Dann die Bin-Definition, die wir hier als
Bind-Bin-Definition
bekommen haben ,
dann den Bin-Klassennamen abrufen Dann würde uns dieser Typ
geben, was wir brauchen. Wenn wir dann runter gehen, können
wir uns
die Event-Map ansehen, richtig, sie
durchforsten,
dann können wir die Event-Action starten Vin Action, sogar Action. Merken Sie sich diese Ereignisaktion, ich möchte sie
in die Datenbank laden. Das versuchen wir hier
zu tun. Vin Action. Dann war es die Action-Action. Die Aktion ist dann Aktion. Merken Sie sich die benutzerdefinierte
Klasse, die wir erstellt haben, rufen Sie die Aktion anhand des Namens ab und übergeben Sie dann den Schlüssel.
Der Schlüssel ist dieser Typ. Der Schlüssel ist dieser Typ. Um zu überprüfen, um welche Art
von Aktion es sich handelt? Denn das ist das
Fachgebiet, das untersucht um welche Art von Aktion handelt es sich? Also, sobald es
die Action bekommt, oder? Dann haben wir die Action. Dann brauchen wir die
Aktionssatzaktion für Ereignisse. Das haben wir. Dann
setzt Events Action Dot den kanonischen Namen, kanonischen Namen innerhalb des VDV,
was eine
Bin-Klassendefinition ist, die wir hier Das ist cool. Dann möchte ich, dass wir etwas extra
tun. Dann, bevor wir das einfügen, wollen
wir überprüfen,
ob diese Standardversion eine Aktion ausführt. Diese
Liste ist leer, oder? Wenn wir sie nicht finden,
existiert sie nicht. Ich meine, wenn es
keine Aktion in der Datenbank gibt
, dann sollten Sie das tun. Ereignisse, Aktion, Aktionsliste für
Ereignisse. Ich glaube, ich wurde nicht auf
einer Event-Aktionsliste hinzugefügt. Drücken Sie hier auf die Event-Aktion. Drücken Sie einfach hier darauf. Diese Liste enthält Ereignisse und Aktionen. In Aktion. Dann sei
bitte einfach neu. Wir kennen die Kapazität, oder?
Ja, wir kennen die Kapazität. Kapazität
wird im Grunde genommen der Größe dieser oder jener Größe entsprechen, oder? Platzieren Sie einfach diese
Aktionsliste für Ereignisse und Aktionslisten. Ordnung. Also Ereignisse,
Ereignisse, anhängig. Ging auf die Aktionsliste. In Ordnung. Also mach das. Dann lass uns noch einen Check
machen. Wenn die Aktionsliste für Ereignisse leer ist, wenn sie nicht leer ist,
ist diese Aktionsliste für
Ereignisse nicht leer. Was machen wir also? Wählen Sie das Repository aus,
dann speichern wir alles. Denken Sie also daran, dass wir alles,
all diese Ereignisse, in
diese Aktionsliste
laden . Wenn sie also leer ist, besteht
kein Grund , die Datenbank zu stören. Aber wenn es leer ist, ist es leer, dann speichern wir einfach
alles darin, oder? Das würde uns also tatsächlich ermöglichen, nur
das zu laden, was
bereits in den Daten vorhanden ist Wenn es nicht existiert,
wenn es nicht existiert, laden wir das ein, was nicht existiert Wenn es existiert, wird
es nicht geladen. Das heißt, das kann
mehrfach ausgeführt werden, ohne dass der
geschriebene Code mehrmals ausgeführt werden kann ohne dass es tatsächlich zu einem
Fehler kommt,
wenn versucht wird, ihn zu laden, der bereits in einer Datenbank
vorhanden ist, oder? Wir können das also
für diejenigen verbessern, die ein bisschen verrückt sind Sie können das praktisch in
der Methode platzieren,
um das Ganze zum Laufen zu Dann könntest du wahrscheinlich all diese Details
in eine benutzerdefinierte Klasse packen Wenn Sie in eine benutzerdefinierte Klasse aufgenommen werden, können Sie
wahrscheinlich ein Schuppenschloss
haben, oder? Sie können eine gemeinsame Methode verwenden, um zu
bestimmen, ob Sie sie ausführen sollten. Wenn Sie ausführen möchten, nehmen
wir an, Sie
haben tatsächlich einen Dienst, der in verteilter Reihenfolge ausgeführt wird .
Er wird eher
verteilt ausgeführt. Sobald Sie das getan haben, nehmen
wir an, Sie sind Microservices und möchten mehr als eine
Instanz davon ausführen Abgesehen davon, dass
alles läuft, können
Sie einfach den Shed Lock verwenden , um zu bestimmen, welcher ausgeführt wird Wenn also der
Anwendungsläufer dort ankommt, überprüft
er den Shed Lock. Wer auch immer den Schlüssel
innerhalb des Shed-Locks erhält, dann ist es s. Also
Shed Lock
benutzt ihn manchmal nach Plan, oder?
In Ordnung Also dachte ich, ich
sollte erwähnen, dass
wir für diejenigen, die
daran interessiert sind, das diejenigen, die
daran interessiert sind, das in
diesem Kurs nicht untersuchen werden. Ordnung, jetzt
konnte ich das erreichen, was
wir uns vorgenommen haben Das ist eine großartige
Implementierung Das ist kostspielig. Das ist kostspielig. Vielleicht
möchten Sie die Methode verwenden, die Sie geschrieben haben Sie erstellen auch ein benutzerdefiniertes Flag um zu bestimmen, ob sie ausgeführt
werden soll oder nicht. Falls Sie aus irgendeinem Grund wissen,
dass die Anwendung kein neues Ereignis
erstellt hat, ein neues Ereignis mit
einer benutzerdefinierten Markierung, können
Sie einfach diese Konfiguration auswählen und sie einfach auf „Falls“ setzen, sodass und sie einfach auf „Falls“ setzen, sodass
sie überhaupt nicht ausgeführt wird,
weil sie
Spiegelung verwendet und Spiegelung
tatsächlich Kosten verursacht. Verlangsamt den Start Ihrer
Anwendung nicht und ich denke, das ist etwas, das
Sie vielleicht ausprobieren möchten. Haben Sie das, aber machen Sie es nur
einmal falsch , wenn Sie neue Ereignisse
haben , die tatsächlich zur Tasop-Tabelle
hinzugefügt werden müssen Ordnung. Das ist
großartig, oder? Ich bin sicher, ihr stimmt mir
zu, es ist großartig. Aber funktioniert es? Funktioniert es? Wir wissen nicht, ob
es funktioniert, oder? Wir haben unsere Datenbank immer noch aktiv? Lass uns sehen.
Die Datenbank läuft immer noch. Lass uns das ausführen. Lass uns sehen. Offenbar haben
wir derzeit nur eine Veranstaltung, ich gehe davon
aus, dass für die
Eventstation eine Zahlung möglich ist
, die P ist, die Canonicam in der Tabelle gespeichert Lassen Sie uns das überprüfen. Das ist das
Update, lass uns das ausführen. Lass uns das ausführen. Ich freue mich wie ihr, zu
wissen, dass das tatsächlich funktioniert, ich freue mich genauso wie ihr. Es funktioniert also, Sie sollten in der
Lage sein, die Tabelle zu erstellen
und zu prüfen, ob sie korrekt
funktioniert. Großartig, kein Fehler. Also
lass uns das aktualisieren. Cool. Also haben wir
die Event-Action. Lass uns das erkunden. Juhu. Das funktioniert Sie können also sehen, dass
wir jetzt die Aktion bekommen, das ist P,
was Zahlung ist, dann ist es der kanonische
Name, der das ist Und das wird sich
als sehr nützlich erweisen, wirklich, wirklich praktisch. Ordnung, Leute, das ist ein
relativ langes Video, und ich glaube, wir können
das Ziel erreichen Lass uns im nächsten Video ein paar
andere coole Sachen machen .
Wir
sehen uns dort, Leute.
29. Unvollständige Veranstaltung erneut veröffentlichen: Hallo Leute, danke, dass ihr
zurückgekommen seid und wieder einmal, wir haben etwas
ganz Tolles gemacht, oder? Etwas ganz Tolles
im letzten Video, oder? Also, zunächst denke ich, dass wir hier etwas Cooles
machen. Also möchte ich weitermachen und
das begehen. Ich habe bereits ein Problem
erstellt und habe es erstellt,
nämlich Event Action. Also mache ich einfach weiter
und bestätige das. Ich nenne es einfach Event
Action Implemented. Implementiert, implementiert. Dann schließt das Tf,
I, Df und wir können dann drücken. Push Wir erwarten, dass das
tatsächlich durchläuft. Nett nett. Leute, jetzt wollen wir etwas Erstaunlicheres
entdecken in diesem Video
etwas Erstaunlicheres
entdecken. Also ein bisschen erstaunlicher. Erinnerst du dich, wir hatten
tatsächlich unvollständige Ereignisse
und abgeschlossene Ereignisse, wir konnten
es nicht durchführen, oder? waren wir nicht in der
Lage,
unvollständige Ereignisse auszulösen würden Andernfalls waren wir nicht in der
Lage,
unvollständige Ereignisse auszulösen
, um zu sehen, ob sie
tatsächlich
abgeschlossen werden Lassen Sie uns daher
ein sehr einzigartiges erstellen. Können wir jedoch versuchen, unseren Test durchzuführen,
bevor
wir weitermachen Weil wir hier wahrscheinlich etwas
kaputt gemacht haben. Ich möchte vermuten, dass
wir
hier etwas kaputt gemacht haben, hier etwas kaputt gemacht haben. Lassen Sie uns das ausführen. Lassen Sie uns das ausführen. Siehst du, wir haben etwas kaputt gemacht. Etwas kaputt gemacht. Als ob
Leute, was macht ihr kaputt? Bestellungen sind in Ordnung.
Mal sehen, dass alles pleite ist. Das heißt, dass ein anderes Modell
von der Aktion eines Ereignisses abhängt. Dies hängt von der Ereignisaktion ab. Wir müssen das beheben, was
das andere Zahlungs-DTO ist ,
das ist das Problem Wir müssen es reparieren.
Wir müssen es reparieren, weil es gegen die Regel verstößt Ich wusste, dass das ein Problem sein würde
, also lasst es uns schnell beheben Denken Sie daran, das war ein Problem. Dieser Typ wird tatsächlich
als ein Wesen darin gesehen, offenbar um uns ein Problem zu bereiten. Was machen wir? Lassen Sie uns benutzerdefinierte Informationen gutschreiben Lassen Sie uns die Paketinformationen
gutschreiben. wollen das nicht preisgeben, wir werden das niemals draußen
benutzen, ausnutzen. Das
ist der Typ, den wir benutzen. Diese Aktion und das. Wir brauchen nicht
einmal dieses Attribut Cover aber lassen Sie uns einfach diese beiden auswählen. Lasst uns diesen Kerl bloßstellen. Lassen Sie uns die Paketinformationen offenlegen. Dann dieses Paket diese Informationen, ich will die Ag. Ihr seid schon daran
gewöhnt,
das G Dot Spring
Framework modulieren, modulieren das Interface, weil es ein Unterpaket ist Denken Sie daran, also Paket, wir verwenden den sogenannten Namen des
Pakets, das Wort Action Dann ja, das war's. Wenn das der Fall ist, müssen
wir für den Typ
, der es benutzt , sicherstellen, dass
es auch ankommt. Ja, benutzen wir es,
wir benutzen es in. Ist es in Ordnung, oder?
Ja, ist es nicht? Ja, Ordnung ist der
Typ. Das ist der Typ. Ist es nicht hier. Dieser
Teil, lass uns sehen. Bin ich im richtigen Verzeichnis? Oh, tut mir leid, hier. Das ist es,
wonach ich suche. Wir möchten hinzufügen, dass wir sagen
möchten: Hey,
ich möchte auch, dass Sie die Ereignisaktion für das Modul Paket
I zulassen. Denken Sie daran, dass dies der
Modus dieser Ereignisaktion und dann der
Unterpaket-Aktion ist. In Ordnung. Nachdem das erledigt ist, lassen Sie uns
noch einmal einen Test durchführen. Lassen Sie uns einen Test durchführen. Lassen Sie uns einfach
diesen Zahlungstest durchführen. Lass uns sehen. Aber das funktioniert.
Lass uns sehen. Funktioniert das? Das funktioniert. Oder uns fehlt
immer noch etwas. Lass uns sehen. Wir sorgen
dafür, dass es Code ist. Fantastisch, großartig. Also sehen wir. Wir sind
wieder auf Kurs, Leute. Wir sind wieder auf Kurs, oder? Weil das eine
sehr wichtige Sache ist. Das dürfen wir nicht vergessen, oder? Das sind die ganzen Lektionen,
aus denen wir versuchen, diesen Kurs zu verleihen oder zu versuchen,
diesen Kurs zu absolvieren, modular ist. Wir
müssen sicherstellen, dass wir von
Anfang bis Ende keine Regeln brechen, wir dürfen niemals gegen Regeln
verstoßen, oder? Okay, das ist
einfach cooles Zeug. Das ist nur Co-Kram. Nun, das nächste, was ich in diesem Video
angehen möchte. Als Nächstes möchte ich mich in
diesem Video mit der Frage befassen , wie
wir
unsere unvollendeten Ereignisse jetzt veröffentlichen Sie müssen in der Lage sein, sie
tatsächlich zu veröffentlichen. Lassen Sie uns also innerhalb
dieses Ereignisses eine Aktion
erstellen, weil ich glauben
möchte , dass es sich um
dieselbe Ereignisaktion handelt. Also werde ich das
innerhalb desselben Action-Typs veröffentlichen, dieses Action-Submodell, so werde ich es nennen Ich nenne es Republish. Ich weiß nicht, ob es
ein War gibt, das stimmt? Was wir veröffentlichen, veröffentlichen wir
einfach. Lassen Sie uns also erneut veröffentlichen. Wir veröffentlichen unvollendete Ereignisse. Nicht abgeschlossene Unabgeschlossene Ereignisse
. Machen Sie einzigartige Ereignisse. Dann wäre es SLF für J, ein Service zu sein Dann ist der
X-Konstruktor erforderlich. Das funktioniert. Das funktioniert. Jetzt werden wir
mehrere Dinge benötigen. Ich brauche das Private, Finale.
Brauche ich einen Verlag Weißt du, ich
brauche keinen Verleger. Ich brauche Event Action
Hypothet Action Poet,
Event Action Post, ich brauche ein
privates, abschließendes,
unvollständiges Denken Sie daran, dass sie eine Schnittstelle verwenden, um das Layout unvollständige Ereignisse, unvollständige Ereignisse zu verwenden
, das private, endgültige endgültige abgeschlossene
Ereignisse, abgeschlossene Ereignisse Abgeschlossene Ereignisse, dann privat. Ich werde wahrscheinlich einige
Daten aus der Umgebung abrufen. Ich schwöre nur auf die Umwelt. Umwelt. CN, dann bringe
ich das einfach rein. Okay. In Ordnung. Also lass uns etwas arbeiten, richtig? Lass uns arbeiten.
Lass uns etwas arbeiten. Okay. Ich schaue es mir
noch einmal an, ich sehe es mir an. Mal sehen, lassen Sie uns eine
öffentliche Methode erstellen, public void. Nennen wir es einfach
Publish. Sie veröffentlichen. Nennen wir es du veröffentlichst.
Dann ergreifen Sie eine Aktion, geben ihr eine Aktion, die
Sie veröffentlichen möchten. Ich glaube, das wird
sinnvoller sein, oder? Sobald wir die Aktion veröffentlichen, bekommen wir die Option und wir bekommen Event, Event, Event
Action aus der Box. Dann optionale
Event-Aktion, Event-Aktion, sie nennen es
Event-Aktion oder
sagen wir optionale optionale
Event-Aktion. Event-Aktion, meine Güte, Event
Post-Event für Event, sie leiten
die Aktion weiter, oder? In Ordnung. Wir prüfen, ob es leer ist, ob das leer ist. Das ist leer. Dann lassen Sie uns einfach
einige Detailinformationen protokollieren , da keine Ereignisaktion für
diese Aktionen vorhanden ist, das funktioniert. Wenn jedoch ein Ereignis vorhanden ist, wenn das Ereignis vorhanden ist, kann ich diese Informationen protokollieren, ich kann veröffentlichen, wir
veröffentlichen, wir veröffentlichen unvollständige Ereignisse für Aktion,
okay? Okay. Also Event Action, Event
Action, wir verstehen das. Dann machen wir einen Kurs. Aktion, Sammelklage, Veranstaltungsaktionen, das
ist nicht das, was ich brauche. Ich brauche das, um den
kanonischen Namen für mich zu bekommen. Ich mache Klasse Punkt für Namen. Kein Übergeben der Ereignisaktion Punkt kanonischen Namen
erhalten.
Das ist es, was ich brauche Dann sollte das zeigen, dass
c eine Ausnahme zeigt. nächste Stein wirf
ihn einfach , anstatt ihn zu
handhaben. Wirf es Dann unvollständig, also sollte ich es
wohl einfach hier regeln, damit
wir, wenn wir unsere Maßnahmen
umsetzen,
einfach herkommen können. Also lass uns das einfach zu TryCatch hinzufügen
. Also um Catch zu versuchen. Kommen Sie zurück und lösen Sie hier unsere benutzerdefinierte Ausnahme aus
, wenn wir bereit sind. Ich möchte das in
diesem Kerl wiederfinden. Lass uns einfach eine Null draus
machen. Wir wissen dann,
Aktionskurs, dann war
das eine Aktionsklasse,
dann machen Aktionskurs, dann war
das eine Aktionsklasse, Sie keine unvollständigen
Veranstaltungspublikationen, reichen Sie sie nicht erneut Dann versuchen wir es einzureichen. Dann geben wir Remember ein, es
nimmt ein Prädikat ein Geben Sie das Prädikat nicht weiter. Veröffentlichung von Ereignissen,
dann die Veröffentlichung von Ereignissen, Punkte erhält Ereignis,
Punkte erhält Klasse,
entspricht dieser Klasse, die wir gerade gefunden haben, und wir müssen sicherstellen, dass dies tatsächlich dieselbe
ist Stimmt das? Ich muss sicherstellen,
dass es tatsächlich dasselbe ist. Alles beginnt mit demselben. Warum beschwert sich das?
Das ist die letzte Stunde. Das ist kein Problem. Wir können es
einfach hierher bringen. Wir müssen den Kerl bloßstellen, kommen Sie
einfach her und
tun Sie es einfach. Ja. War Filme. Ja,
also sollte es in Ordnung sein. Ja, du kannst es einfach wissen.
In Ordnung. Das funktioniert. Dann willst du, wenn du fertig
bist, können wir Ereignisse löschen, Punkte, dann können wir Ereignisse veröffentlichen und dann die Ereignisse
auswählen. Denk dran, das ist der vollendete
Typ. Das ist abgeschlossen. Sie können also die abgeschlossene
Veranstaltungspublikation auswählen. Es hat eine Löschoption. Sie können also auch mit
einem Prädikat löschen oder wir können mit unserer Dauer
löschen Wenn das also tatsächlich
erfolgreich funktioniert, können
wir nicht garantieren, dass
dieser sofort ausgeführt wird, denn wenn Sie überprüfen, handelt es sich um einen Stream und es kann eine Weile dauern, bis er
tatsächlich abgeschlossen Siehst du, wenn du
dir das ansiehst, lass uns diese Implementierung
überprüfen. Schau dir das an. Es führt tatsächlich für jeden
einen Stream-Filter bevor der
Ziel-Listener aufgerufen Wir können also nicht garantieren, dass es sofort
fertig ist,
bevor wir das einfügen, sofort
fertig ist,
bevor wir das einfügen,
oder? Also können wir das nicht
garantieren. Also was wir tun werden, ist, dass wir einfach
löschen, jeden anderen löschen als
die Dauer, richtig? Die Dauer, Dauer, richtig? Stunden von Stunden von Stunden. Stunden,
dann legen wir das
Grundstück ab, um uns die Stunden zu besorgen. Das ist tatsächlich konfigurierbar. Wir können buchstäblich
konfigurierbare Dot-Get-Eigenschaften einrichten. Denken Sie daran, dass wir hier die
Umgebung definiert haben. Wir können auch einen Wert
aus dem Spring-Framework verwenden ,
aber ich vertraue darauf, diesen zu verwenden. Dann nennen wir es
Deletes Event Dot Action. Nennen wir es so und dieses verlangt, dass es von Class Long, Long oder
Class
sein sollte , Long oder
Class Dann geben wir ihm
einen Standardwert. Nehmen wir den Standardwert
von sagen wir 5.000 an. Wie viele Sätze, sagen wir einfach
100 Byte hundert. Lassen Sie mich das richtig erklären. Jetzt haben wir etwas
Cooles. Wir können den Typen anrufen
und
schauen, ob es funktioniert Wir müssen wissen, ob es
funktioniert, damit es nicht funktioniert. Lassen Sie uns die
Umgebungsvariable dessen konfigurieren , was wir hier
eigentlich gesagt haben. Gehen wir zur
Umgebungsvariablen enviro bend Um uns Zeit zu sparen, habe ich das
kopiert, also
machen wir das einfach , ja. 5.000 Das sind eigentlich
Ereignisse, diese Ereignisse. Schauen wir uns den Kerl noch einmal an. Also lösche Ereignisse. Dauer. Die Dauer ist
überschritten. Okay? Also, wie du siehst, sind
es Karten für diesen
Kerl. In Ordnung. Also das haben wir tatsächlich und das ist wirklich cooles
Zeug. Das ist cooles Zeug. Sind wir fertig? Ich denke, wir können immer noch einige zusätzliche
Details untersuchen, anstatt in
Aktion zu treten. Wir sollten wahrscheinlich eines
haben, das alle
abgeschlossenen Ereignisse veröffentlicht. Dann sollten wir eine haben
, die eine Liste von Maßnahmen enthält. Ich denke, das sollte
eine gute Umsetzung sein. Mehr davon gibt es im nächsten
Video. Danke, Leute. Schau dir das nächste Video an.
30. Unvollständige Veranstaltung 2 erneut veröffentlichen: Okay, Leute, im letzten Video haben wir das geschafft. Ich denke, wir müssen testen,
ob es funktioniert, oder? Ich denke, jemand
wird mir zustimmen, wir müssen testen, ob
das funktioniert, oder? Lass es uns testen, ob es funktioniert. Haben wir Event-Action? Wir haben keine Event-Aktion, oder lassen Sie uns einfach eine erstellen. Lassen Sie uns einfach einen Aktionstest für
Ereignisse erstellen. Oh, ich habe das verpasst,
Leute. Ich habe das verpasst. Ich wollte hier
etwas hinzufügen. Wow, ich weiß nicht,
warum ich es verpasst habe. Ich weiß, dass wir
mit dieser Aktion abrufen werden, also müssen wir tatsächlich zweimal
einen Index dafür erstellen Ich glaube, ihr
werdet mir zustimmen. Ich mache das bei Index. Bei Index dann der Name
einfach Action ID,
Action IDX, dann
die Spaltenliste, die Spaltenliste
wäre die Aktion, die dazu passt und
die
Stadt erhält durch Aktion Okay? Also ich denke, das
funktioniert. Ich denke, das funktioniert. Dann ist es einzigartig, oder? Ja. Ja. Ich denke, das funktioniert. Das funktioniert. Alles klar. Sobald Sie tatsächlich damit beginnen, wird
das tatsächlich veröffentlicht, der Index
wird tatsächlich dort platziert. Wir haben versucht zu sehen, ob
wir diesen Typen testen können. Funktioniert es?
Arbeitet der Typ? Okay?
Lassen Sie uns also zunächst hier Ihre Kreditwürdigkeit testen. Der Cred-Test. Ich nenne ihn bei Action Icebration In Ordnung wie immer,
Anwendungsmodultest. Dann müssen wir überprüfen, ob wir das auslösen
können. Dann ein Test, vermeide
etwas, nur um es zu verifizieren. Ja, verifizieren Sie einfach das Modul
, um das Modul zu verifizieren. Verifizieren Sie das Modul, nur um es zu verifizieren. Lassen Sie uns einfach eine
Überprüfung des Moduls ausführen. Lassen Sie uns das einfach bestätigen, falls
das nichts kaputt macht. Websites. Ich leite diesen Typen. Okay, also lass uns
diesen Kerl leiten. Lass uns sehen. Lass uns sehen. Funktioniert jetzt. Dann machen wir beim nächsten Stopp die Verkabelung. Lassen Sie uns
abgeschlossene Geräte veröffentlichen , um diesen Typen einzubinden oder um abgeschlossene Ereignisse zu verdrahten, nennen
wir es abgeschlossene Ereignisse Lass uns einen Test dafür machen.
Lass uns einen Test dafür machen. Nennen wir es ungültige Tests. Abgeschlossene berechnete Ereignisse. Dann nenne ich einfach nichtig und veröffentliche
dann, welche Aktion erinnere mich an die Aktion der Zahlungen Wenn Sie in der Tabelle nachschauen, hat
diese Tabelle eine unvollständige
und eine, die unvollständig ist. Wenn das funktioniert, sollten wir
den Fertigstellungstermin hier finden. Ich nehme an, Sie
finden das Fertigstellungsdetail. wir sicher, dass wir
die Simulation für
fehlgeschlagene Ereignisse entfernt haben . Lassen Sie uns auf Nummer sicher gehen. Warum ist es so?
Warum ist es so? Warum ist es so, oder? Wo ist es? Sind es
Zahlungen, Zahlungen? Wir haben hier auch etwas Arbeit, nicht etwa
Zahlungstabelle, komm zurück. Lassen Sie uns einfach sichergehen, das
sollte tatsächlich durchgehen und schauen, ob es tatsächlich erfolgreich
versiegelt wurde. Wir
werden das versiegeln können. Ordnung, lassen Sie uns diesen
Test durchführen. Lassen Sie uns diesen Test durchführen. Alles klar? Ja, es
sollte im Grunde ein Test sein. Ich neige dazu, es von hier aus auszulösen. Wahrscheinlich möchte ich
vielleicht eine Art
Controller erstellen , egal ob das nur auslöst oder
so oder vielleicht einen Job, wie ich bereits erwähnt habe,
damit das funktioniert. Mal sehen, ob das
funktioniert. Das ist das einzige weniger. Das wurde verschoben. Lass uns sehen. Fantastisch. Sei
immer als Zuhörer zu sehen, der Zuhörer
geht schon zu den Sendungen Die Ereignisse lassen nicht gefunden werden. Nicht gefunden? Ich dachte, ich
schicke etwas anderes. Eine Publikation wurde gefunden, wir veröffentlichen auf der Suche nach vollständigen Ereignissen, eine
Publikation wurde gefunden. Diese Krankheit oder
Bezahlung dF Das Überspringen einer
Publikation zum Berufsleben lala unvollständig Schauen wir in der Tabelle nach.
Ich mache etwas falsch. Schauen wir in der Tabelle nach. Oh,
das ist nicht durchgekommen. Das ist nicht durchgegangen etwas hat sich nicht
wirklich summiert. Etwas hat nicht
gepasst. Lass uns sehen. Schauen wir uns
die Ereignisse an, die wir
tatsächlich durchgeführt haben. Mal sehen, was hätte
passieren können? Möchte ich löschen? Ich glaube nicht, dass ich noch löschen
möchte. Lassen Sie mich
das vorerst kommentieren. Dann lass uns diesen Kerl auslösen. Lassen Sie uns zeigen,
dass das tatsächlich passiert. Dann denke ich, lass uns etwas extra
machen. Dann lass mich diesen
Typen auswählen. Lass uns das machen. Dann lass uns das machen. Dann
lass uns das machen. Lass uns einloggen. Lass uns ein bisschen einloggen, oder? CP-Variable, tut mir leid, tut mir leid. Dies sollte das Prädikat Straight Talk
Predictor In Ordnung, lassen Sie uns sehen, was schief gegangen
sein könnte. Als Breakpoints hier. Ich würde sehen, ob das passt. Ich werde sehen, ob es sich bei diesen Spielen um komplette Ereignisse
handelt. Lass uns sehen. Wie kann ich das
überprüfen? Lass mich nachdenken. Wir sehen den Namen als den
kanonischen Namen. Kanonischer Name oder Klasse abrufen. Was habe ich hier gemacht?
Das wird Klasse, okay? Ereignisse. Warum hast du wieder Unterricht
bekommen? Das ist nur ein Name,
da kriegst du Unterricht. Dann dieser Kurs. Warum gebe ich den Kurs? Was steckt in dem
wirtschaftlichen Namen. Also die Ereignisse,
diese Ereignisse. Also ich kann es beurteilen, ich
gebe nicht die Fähigkeit, es zu beurteilen. Ich gebe nur die Fähigkeit
, die Ereignisse einzuschätzen. Und dieses Ereignis ist ein Objekt. Also versuche ich, die Objekte
miteinander zu
vergleichen , damit wir die Ereignisse zeigen können. Okay. Sehen wir uns diese Kennung an. Lass uns sehen. Ich
poste einfach dieses Video. Wir können zurückkommen, um zu sehen, was ich hier
tatsächlich habe .
Nur eine Minute. Ordnung. Danke, Leute. Ich habe
das getestet und herausgefunden,
was das Problem ist. Unsere Implementierung funktioniert,
was wir
hier für die veröffentlichten Ereignisse tatsächlich hatten . Das funktioniert tatsächlich. Du
musst nichts ändern. Das Problem war im Grunde
das, wo das Problem lag. Während wir es im Test ausführen, führen
wir es tatsächlich vom
Test aus aus, der Listener wurde nicht gefunden Also die Listener-Event-Aktion
hier . Der Listener
wurde nicht gefunden Dadurch wurde der Zuhörer nicht
gefunden. Das musste ich tun, ich musste
einen Controller innerhalb
der Event-Aktion erstellen , dann habe ich ihn tatsächlich eingefügt Dann wurde
diese Person veranlasst , das als
Anforderungsparameter zu
verwenden, das
dann ausgewählt und dann von hier aus
veröffentlicht Dann hat das tatsächlich funktioniert.
Das funktioniert tatsächlich. Das werde ich nur demonstrieren.
Gehe zur Event-Aktion. Sie sehen, dass dies abgeschlossen wurde. Ist abgeschlossen, ich
werde das machen, was ich jetzt einstellen
werde,
und ich werde es speichern. Dann würde ich das neu starten
lassen wir die Anwendung neu starten. Ich glaube
, ich starte die
Anwendung versetze einige Dinge
in den Bug-Modus. Ich verschiebe diese Haltepunkte und komme zurück zu
diesem Typen und platziere die Haltepunkte hier, damit
wir sehen, dass die Aktion
tatsächlich korrekt ist .
Lass uns auslösen. Das ist Lass uns es auslösen. Das ist die Bezahlung,
das ist die Zahl. Sugar, es kommt hier rein. Lassen Sie uns
diesen Ausdruck auswerten, um zu sehen, was für einen Wert, welche Art von Om uns geben. Siehst du? Also haben wir
das genau verstanden. Also, sobald wir das vorantreiben, schauen an, was wir hier haben. Beobachten Sie das genau.
Also drück drauf. Also, keine Zahlung
ist, wenn Sie jetzt verpassen. Lassen Sie uns das also bestätigen. Siehst du? Das ist tatsächlich abgeschlossen. Das ist es also im Grunde. Also sind wir in der Lage, das tatsächlich erfolgreich zu
machen. Ich würde also tun, was ich tun würde, ist, dass
wir zusätzlich einige zusätzliche
benutzerdefinierte Methoden streichen. Also zusätzliche benutzerdefinierte Methoden, die wir für die Veröffentlichung verwenden
können. Was ist, wenn wir
für eine Veranstaltungsliste veröffentlichen möchten. Ich kann es veröffentlichen,
dann veröffentlichen wir, wir können es auch nennen, wir
veröffentlichen es für dieses Mal. Sie können, sagen wir,
eine Liste von Aktionen haben. Liste der Aktionen, dann
Aktionslisten oder Aktionen. Wir haben das, dann ist es
auch Aktion, nicht Aktion, nur Aktion. Dann haben wir das.
Dann können wir dann vier Keine Aktion für jeden machen.
Veröffentlichen Sie es nicht einfach erneut Wir veröffentlichen diesen Typen einfach. Das funktioniert tatsächlich. Das gibt uns das, was wir im Grunde haben. Wir
können uns dann entscheiden, jeden von ihnen zu löschen, und wir können anfangen, uns
vollständig zu bewegen , denn wir können
diese Arbeit erledigen , indem wir den
Lambda-Ausdruck hier verwenden Das funktioniert oder wir könnten
beschließen, alles zu löschen. Wir nennen es einfach
Republish Das
veröffentlichen wir , das keine Parameter berücksichtigt, oder? du
jetzt etwas privat nimmst,
veröffentlichst du alles,
alles, richtig? Alles. Also nur um
Veröffentlichungsereignisse zu protokollieren. Nennen wir es
unvollendete Ereignisse. Abgeschlossene Ereignisse, richtig? Also haben
sie es für dasselbe getan. Also bis jetzt schauen wir uns
alles an, richtig? Für Aktion, Aktion, dann
Aktionen, die Werte, dann die Werte, richtig? Handeln der Werte. Das ist also dein Test, dann veröffentlichen wir einfach. Also können wir das machen. Nun, eine Extraktion, die wir
machen können, ist dass wir diesen
Zeitplan eingeben können Geplant. Wir können uns dafür
entscheiden, einen Cron-Ausdruck zu verwenden Nehmen wir an, für diejenigen, die
möchten, dass ihr Job wahrscheinlich um Mitternacht
ausgeführt wird, könnten
Sie einen Cron-Ausdruck
und eine Platzierung für Ich denke, Mitternacht sollte Null, Null, Null sein, dann Stern Stern Stern Das funktioniert, oder Sie könnten
sich dann entscheiden,
zu einem festen Preis zu veröffentlichen. Es handelt sich um einen aktuellen Job
oder um einen Festpreis. Nennen wir es feste
Tarife, feste Tarife. Lassen Sie uns sehen,
lassen Sie uns das untersuchen. Ich lade einfach den Download herunter. Schauen wir uns genau an, was Dokumentation
zu Scheduled steht. Wir wissen genau, was das bedeutet. Beim Fix-Streaming wird ein Viertel
innerhalb eines Aufrufs verwendet, um diesen
Zeitraum weiter aufzurufen oder eine Zeichenfolge zu verwenden Benutze einfach a, also das
ist ein fester Long, also kann ich einfach Auch ein Fondl? Die Zeiteinheit ist Millisekunden. Aber kann es durch Zeiteinheiten überlesen
werden? Hat es eine Zeiteinheit? Fantastisch. Es hat eine Zeiteinheit. Wir können das einfach machen und dann Zeiteinheiten
ersetzen. Nennen wir es Zeiteinheiten
und Zeiteinheiten. Sagen wir, äh Sekunden. Lass uns Sekunden machen,
oder? Das würde uns die Möglichkeit geben zu sehen, ob das
tatsächlich erfolgreich läuft. Also mache ich 10 Sekunden, oder? Ich mache 10 Sekunden. Ich würde also hier reingehen. Ich gehe in die Datenbank, richtig, und ich werde diese beiden tatsächlich
löschen. Ich setze sie auf Null. In Ordnung. Also lass uns sehen, ob
das funktioniert, oder? Mal sehen, ob das funktioniert. Also diese Zeit ist kein Zeitplan,
ich hatte keinen Zeitplan. Das heißt, wir müssen uns nicht
wirklich von irgendwoher qualifizieren. Lassen Sie uns das einfach
noch einmal ausführen und dann
nach 10 Sekunden beobachten nach 10 Sekunden ob das
tatsächlich ausgelöst wird Ordnung. Also lass uns sehen. Also bring ich das einfach mit
, also lass uns sehen,
ob es nach 10 Sekunden funktioniert? Andere Zahlung erhalten. Sie sehen, es hat Steuern geltend gemacht, die
bereits erhoben wurden Lassen Sie uns das einfach bestätigen. Fantastisch. Siehst du? Das ist diese Kiste. Das habe ich für alles getan. Siehst du? Ich habe
nichts für Zahlungen per E-Mail oder
Aktionsfonds gefunden. Ich veröffentliche „Computed for Action“ und
sage dann, dass ich
alle 10 Sekunden kommen soll Ich glaube, wir werden in der
Lage sein,
weitgehend genug zu demonstrieren , wie das
Publish-Event funktioniert Also dieses Mal, im nächsten Video, gehen
wir zur Zahlung über, melden
dann Daten bei
den Zahlungen an und veröffentlichen dann die benutzerdefinierte
Ereignismarkierung für E-Mails. Ordnung. Wir sehen uns
im nächsten Video.
31. Payment und E-Mail-Listener implementieren: Ordnung. Danke, dass
du zurückgekommen bist, danke, dass du immer noch zu mir gekommen und danke
, dass du dieses Mal hier bei mir bist. In Ordnung. Also lass uns reingehen. Wir
konnten hier etwas arbeiten. Das ist es, was wir erreichen
konnten. Du solltest alle
10 Sekunden weiterlaufen. Ich glaube, ich möchte es vorerst einfach
pausieren, es geht nicht alle 10 Sekunden, belassen Sie es
einfach dabei. Was machen wir dann als Nächstes. Gehen wir zum anderen Dienst. Anderer Service. Lassen Sie uns für jede
Bestellung, die ich gesendet habe, für jede weitere gesendet habe, eine E-Mail schicken, richtig? Lass uns eine E-Mail schicken.
Lassen Sie uns eine E-Mail versenden. wir eine E-Mail mit der Aufschrift: Hey, bitte sende eine E-Mail
, sobald das erledigt ist. Das wäre also ein großartiger
Test für uns, oder? Um das zu vervollständigen, lassen Sie uns eine E-Mail mit den
Details einer E-Mail erstellen Sie füllt nur unseren Anwendungsfall , den wir zu erreichen versuchen Also mach es zu einem Rekord.
Nehmen Sie auf und fügen Sie dann unseren benutzerdefinierten Marker hinzu. Wenn du nicht weißt, was
diese benutzerdefinierte Markierung ist, musst
du dir vorherige
Videos ansehen, um sie sehen zu können. Benutzerdefinierter Marker. Dann machen wir die
Zeichenfolge E-Mail, Zeichenfolge, E-Mail, dann die Zeichenfolge Kundenname, dann die Zeichenfolge Bestell-ID, dann den langen Gesamtbetrag und
dann einen Bollier Wenn die Bestellung abgeschlossen ist oder die Bestellung abgeschlossen ist Sie sind abgeschlossen,
oder? Ich denke, es sollte ausreichen, oder? Ich denke, sie sollten
ausreichen oder komplett sein. Dort ist alles abgeschlossen. Es ist in Ordnung. Also. Lassen Sie uns als Nächstes
zum anderen Dienst gehen. Ich habe gerade einige benutzerdefinierte
Verbesserungen vorgenommen, oder? Nehmen Sie einfach eine
benutzerdefinierte Verbesserung vor. Also wollen wir
die E-Mail versenden. Also die E-Mail-E-Mail DTO, E-Mail DTO, neue E-Mail DTO, gib
keine Details Also, was sind Details. Der erste ist der Kundenname,
nur die E-Mail,
Rat der Kunden-E-Mail, dann bestellen Sie
dT Punkt, um den Kundennamen zu erhalten. Was ist die nächste
Phase oder Kennung. Das sollte sein, woher wir
bekommen, dass das aus
der O-Reihenfolge kommen sollte , oder den Bezeichner. Was ist dann der Gesamtbetrag? Der Gesamtbetrag, ich glaube,
wir haben den Gesamtbetrag, wir schicken den
Gesamtbetrag hierher, diesen Betrag bekommen. Ich denke, das sollte es sein. Das sollte funktionieren. Ist das dann endlich falsch oder komplett falsch? Die anderen sind schon fertig. Lassen Sie uns diese
vollständige Reihenfolge so anpassen, dass nur beide Ereignisse
zusammen
gesendet werden. Gib das weiter. Dies erfordert E-Mail-Details. Ich gehe hierher und nehme den
Kerl auch mit. Oder nimm die
E-Mail dieses Typen mit. Ich denke, das sollte
in erster Linie funktionieren. Ich erstelle gerade einen Event-Publisher. Die Veröffentlichungsmail an Sie. Dann sage ich einfach Loglog. Keine Information. Dann lasse ich uns
einfach ansehen, E-Mail-E-Mails für andere zu senden. Ich denke, das funktioniert. Ich denke, das funktioniert.
Ich denke, das funktioniert. Dann brauchen wir innerhalb der Zahlung die Zahlung,
lass uns ein paar coole Sachen machen. Lass uns ein paar coole Sachen machen. Lass uns zu den Zahlungen gehen. Was die Zahlungen angeht,
haben wir diesen
Zahlungsservice nicht berührt. Lass uns einfach etwas arbeiten.
Lass uns etwas arbeiten. Wir haben das hier zum Anhören. Ordnung. Lass uns
einfach ein bisschen arbeiten. Jetzt haben wir das, wir haben diesen Kerl
bekommen. Sagen wir einfach, Zahlungszahlung entspricht neuen Zahlungen, richtig? Nur Zahlungen, dann
das Set oder Ausweis. Geben Sie die ID ein, dann nur die
Zahlung an Sie erhalten die ID, dann legen Sie die Beträge fest, die wir Ihnen
zahlen, um Beträge zu erhalten. Dann belassen wir es beim Status. Der Status ist immer noch unvollständig. Das ist immer noch unvollständig, nicht
fertig, also ist es unvollständig. Dann rufen Sie einfach das
Zahlungsregister an, das ist sichere Zahlung. Ich denke, das sollte
im Grunde reichen. Jetzt
verwenden Sie tatsächlich E-Mail per E-Mail. Das bedeutet, dass wir uns jetzt im Grunde daran erinnern
müssen, dass wir E-Mail als
ein anderes Modell betrachten sollten , weil es möglich ist. Ich weiß, dass einige
Unternehmen tatsächlich einen separaten Dienst anbieten
, der E-Mails bearbeitet. Jede der E-Mails, die sieben Organisationen stammen, geht allein
an diesen Dienst. Der Lebenslauf wird wahrscheinlich mit einem
SMTP eines Drittanbieters oder einem E-Mail-Dienst eines
Drittanbieters integriert , dann wird einfach
alles verkabelt und sie können
mehrere Instanzen haben , sogar
eine andere Lassen Sie uns ein neues Modell erstellen. Nenn es einfach E-Mail. Das beinhaltet
nur eine Klasse. Nennen Sie es einfach E-Mail-Service. E-Mail-Service, das ist es einfach. Dieser Typ wird nur einen Zuhörer
haben. Das ist im Grunde das, was du hast. Dann teste ich nach J, dann ist das die Komponente, dann nenne ich es
einfach void. Mail schicken. Das ist es, das funktioniert. Aber dieses
Mal hören wir zu, nicht darauf, wir warten auf
die letzten E-Mail-Details. Darauf achten wir
. Denken Sie dann daran, dass wir
unseren Ton bei der Anwendung, dem
Modul Listener, verwenden unseren Ton bei der Anwendung, dem
Modul Listener Sie können einfach die Log-Punkt-Informationen protokollieren. Dann sagen wir:
E-Mail-Eigenschaften erhalten, Eigenschaften erhalten. Sie gehen davon aus, dass
E-Mail
nichts über ein anderes Modell weiß .
Sie sagen, ob E-Mail ist E-Mail, das ist, wenn E-Mail
E-Mail GTO, das mein Tippen ist? Ich glaube schon. E-Mail senden oder vollständig. Wenn es nicht vollständig ist, dann machen wir das anders, wir machen das, richtig? Das ist in keiner Weise optimal. Ich versuche nur zu demonstrieren, oder? Das ist also nicht optimal. Ich glaube, es
sollte einige zusätzliche Details geben. Normalerweise kann man sagen, was
passiert, ist, dass es
wahrscheinlich einen HTML-Code geben sollte , in dem Sie
dann die Dinge konfigurieren. Sie verwenden einen Platzhalter,
um das zu platzieren, und die UI-Leute oder die UIUX
hätten eine
nette Oberfläche entworfen und die
Frontend-Leute hätten tatsächlich eine Vorlage in die Sie einfach den Wert einfügen Du übertriffst einfach die
Botschaft, sie bekommen die Nachricht und sie fügen sie einfach
ins Display ein
, sodass eine ziemlich nette E-Mail an den Kunden gesendet
wird Das ist passiert. Aber
hier simulieren wir es einfach, also simuliere ich einfach eine Zeichenfolge. Das ist der Text
, den wir senden, sagen wir die M-Plus-E-Mails bekommen den Namen, zehn plus diese neue Zeile, zehn plus lass uns gehen und einfach
sagen, andere wurde initialisiert Andere wurden initialisiert mit ID plus dann der E-Mail-ID, zehn plus diesem Plus und
2000 mit uns als Summe davon, dann gehen wir runter Ich denke, du kannst sie hier platzieren. Fangen Sie mit der Summe an, dann
erhalten diese E-Mails Beträge, Beträge,
Gesamtbeträge. Dann denken Sie daran, dass es lang ist, Sie sollten daran denken
, durch 100 zu teilen. Ist lang, dividiere durch 100. Lang, das sind Informationen, sagen Sie einfach erste E-Mail, erste
E-Mail, andere Details. Ich denke, das funktioniert.
Das funktioniert. Das funktioniert. Ich habe meinen Körper verloren. Diese E-Mail in diesem Feld. Das. Wir machen
nichts Fantasievolles, es sollte ein gemeinsames Plus sein Fancyful Dann funktioniert die
E-Mail nicht. Ich wähle einfach dieselbe Nachricht, sei
einfach dasselbe. Es ist in keiner Weise, irgendeine Form von Anämie. Versandhandel,
sagen wir einfach dieses Mal. Wenn die Bestellung abgeschlossen ist, sagen Sie
einfach Ihre Bestellung. Mit der ID ID diese Aufgabe dieses
Tas teilweise wurde
diese Aufgabe dieses
Tas teilweise
erfolgreich abgeschlossen. Ich wurde erfolgreich abgeschlossen. Erfolgreich, rufen Sie
diese E-Mail einfach an: E-Mail-Details, Abschluss- oder E-Mail-Details oder E-Mail-Abschlussdetails Das funktioniert mit den Abschlussdetails. Nimm das einfach. Am Ende
des Tages
können wir diese Informationen einfach protokollieren. Dann wird E-Mail an E-Mail gesendet, um diese E-Mail dann einfach
zu protokollieren und sie an die geheime
E-Mail von dot
getIMilSrcord zu Okay. Das ist E-Mail, während
du dir etwas anderes besorgst. E-Mail. Ordnung. genau so wird der
E-Mail-Dienst aussehen. Also müssen wir jetzt ändern. Ich denke, lassen Sie uns
unseren anderen Service überprüfen. Der Datendienst ist jetzt also in Ordnung. Also können wir beide
zusammen schicken. Wir überprüfen. Jetzt drängen wir auf die
Veröffentlichung der E-Mail. Ich denke, wir können das
ausprobieren. Wir können das ausprobieren. Schauen wir uns also an, wie das funktioniert. Aber dieses Mal
senden
wir tatsächlich auch Daten per E-Mail, okay. Also lass uns sehen, lass uns sehen. Also, was passiert, ist, dass wir
das starten und ausführen. Wir werden es ausführen und
es von dem
Dummi-Controller aus ausführen, den wir hier erstellt haben, oder? Vom
Dummi-Controller aus Ich glaube, wir haben unsere
Daten noch irgendwo hier, also lass mich einfach checken, checken,
checken Schauen Sie sich einfach unsere Skizze an.
Richtig. Also ja, wir sehen, wie die
CSL das einfach
auf das andere übertragen hat und
lassen es uns laufen sehen Lass uns das sehen.
Das wurde abgeschlossen, schauen wir uns
also unser Logbuch an. Schauen wir uns das Protokoll an. Wir. Sie sehen, das funktioniert. Ich gehe tatsächlich
Empatisive initialize DZ,
bla, bla bla wurde mit ID
initialisiert, initialisiert Dann wird die nächste E-Mail
gesendet, um diesen, den Listener , zu testen Sie können die anderen Zahlungen
im Listener sehen ,
das funktioniert tatsächlich Der Listener wählt den Listener für die Anwendungs-E-Mails, die
ordnungsgemäß funktionieren , weil wir dort die Empaties, die wir erhalten haben, protokollieren die Anwendungs-E-Mails, die
ordnungsgemäß funktionieren
, weil wir dort die Empaties, die wir erhalten haben, protokollieren
. können Sie einfach schnell
erkunden. Schau dir das an. Siehst du. Wir haben also gesehen, dass
E-Mail-Eigenschaften eingegangen sind. Also, richtig. Also ich denke
, das ist ein guter Meilenstein. Gehen wir einfach einen Schritt zurück und setzen wir es schnell
um , sagen wir, wir
wollen das Oder abschließen. In Ordnung, wir sehen uns
im nächsten Video.
32. Fehler in Zahlung implementieren 2 beheben: Hallo zusammen, Z hier. Es gab einen einzigartigen Fehler, tatsächlich
im nächsten Video aufgetreten ist. Ich möchte schnell darauf hinweisen. Sie könnten es im Grunde
einfach reparieren und wir gehen
weg, damit Sie nicht
dasselbe Problem haben müssen. Ich möchte nur ein
sehr kurzes Video machen , um zu
erklären, was passiert ist. Wie ihr in dem Video bemerkt, haben wir tatsächlich ein Detail geändert. Wir sind tatsächlich in den
Zahlungsservice gegangen und ich habe das
geändert. Ich habe es
von an auf Bestellung abschließen geändert. Dies
sofort zu tun würde nicht mit dem übereinstimmen was wir bereits
in der Datenbank haben. Denken Sie daran,
dass diese Verkäufer-ID tatsächlich auf dem basiert, was
wir hier tatsächlich haben. Denn wenn wir das Ereignis tatsächlich pushen, gibt es
einen Listener, Listen, der Listener basiert
auf dem Paket,
diesem Paket und dann
dem Methodennamen Eine schnelle Lösung, was Sie schnell tun
könnten, ist, in die Datenbank zu gehen , um
in die Datenbank zu
gelangen Nehmen wir dann an, Sie verwenden einen
anderen Paketnamen. Deshalb nenne ich dieses
Basispaket den Namen. Es gibt ein Basispaket, einen
anderen Paketnamen. Geh rein und ändere alle Aufzeichnungen,
die ich habe, ändere sie, um die Bestellung abzuschließen. Denken Sie daran, dass
in der Tabelle mit den Veranstaltungspublikationen eine Listener-ID steht, der das Problem schnell
behoben werden könnte Sie müssen also nicht warten, bis wir
den Fehler später
tatsächlich behoben Ordnung. Danke Leute. Wir sehen uns im nächsten Video.
33. Zahlung 2 implementieren: Ordnung, danke, dass ihr
zu mir gekommen seid. Noch einmal. Ordnung, das
ist hier. Okay, ich glaube, hier war ein Tippfehler. Ich habe die Zahlung verwendet oder eine
andere ID mit der Zahlung und
DTO erhalten , sodass ich
das korrigieren konnte , weil
ich bei der Inspektion festgestellt
habe, dass das
Null war und das Null war, also jetzt, aber ich
konnte das korrigieren Ordnung. Also ja. Also, lassen Sie uns
die Teile mit einer anderen ID simulieren, sagen wir, der Benutzer möchte der Kunde die Zahlung
abschließen möchte. Richtig, also können wir das einfach tun, indem ein anderes Ereignis
aus der Bestellung
senden. Ich sage nur diesen Controller. Wir hatten hier einen Controller. Dieser Controller wird nur einen weiteren
haben, auf dem steht, dass Zahlungen
abgeschlossen sind. Ich mache das einfach. Öffentlich und dann sage ich
Response Entity. Anderes,
nennen wir es komplette Ordnung. Wir erstellen das in wenigen Minuten. Bestellung abschließen. Nennen wir es,
nennen wir es komplette Bestellung. Bestellung abschließen. Dann nehmen Sie eine vollständige Bestellung auf. Abgeschlossen. Ja, ich
finde das in Ordnung. Dann gib ihm auch ein fertiges. Text der Anfrage senden und dann die Antwort in der Nähe
von Responsenity,
Responsenity zurückgeben in der Nähe
von Responsenity,
Responsenity Antwortentität. Ich benötige diese
Antwortentität also nicht. Dann dieser andere Service,
das sind komplette Zahlungen. Implementieren Sie also diese
vollständige Zahlung. Dann haben wir eine
komplette Bestellung. Dann denke ich, das
sollte funktionieren, oder? Wenn Sie den
HTTP-Status abrufen möchten, ist das okay. In Ordnung, also zuerst
, lasst uns das herausfinden. Ich ordne das dem DTO zu. Ich nehme an, mach es zu einem Rekord, mal sehen, mal sehen Gib hier einfach ein paar Details an. Wir rufen einfach an, wir
nennen diese Zeichenfolge. Bestellungskennungen müssen benötigt
werden,
dann schließt Boler die Zahlungen ab Ich denke, das sollte okay sein. Ich
denke, das funktioniert. Ja, das sieht also hübsch aus. Ja, hierher zurückzukehren, das sollte nicht glücklich sein. Sollte glücklich sein,
das sollte glücklich sein, dann müssen wir diesen Kerl erschaffen. Lassen Sie uns das umsetzen. In Ordnung. Ich nehme das alles und
verschiebe es auf Ja. Vollständige Zahlung. Das ist also das nächste, das
wir uns ansehen wollen. Also suchen wir im Grunde
nur nach dem. Also ordnet das Repository die Reihenfolge an, wir haben das implementiert, die
Reihenfolge nach der Order Identifier es
dann dem
anderen im Identifier übergeben. Also gib uns ein optionales. Ich gehe davon aus, dass es optional ist. Ich nenne es einfach optionale Bestellung. Optionaler Lader. Lassen Sie mich mehr Platz
schaffen, damit
wir sichtbar sehen können Es sollte ein optionaler Loader sein. Als Nächstes können Sie sagen, ob der
optionale Loader leer ist. optionale Lader ist
leer. Aber er ist leer. Dann wirf einfach kurz vor der Laufzeit und repariere all diese
Fehler später. Dann andere nicht gefunden. Es ist in Ordnung. Aber wenn es nicht leer ist, würde
der andere den anderen bekommen, sagen wir,
der endgültige Betrag wäre, wir haben die Bestellung,
Inventar, dann Betrag. Denken Sie daran, dass wir das
erstellt haben , wir haben es in den letzten
einigen der vorherigen Videos erstellt. Schauen wir uns das an, wo
wir die Abfrage tatsächlich verwendet haben, bekommen wir das, wir haben das gemacht. Ordnung. Du
musst diese Abfrage testen. Wir können diese
Abfrage leicht testen. Ich wähle das einfach aus. Dann können wir einfach zur Konsole gehen und die Abfragekonsole
erstellen. Ich platziere das einfach hier. Lass uns die Ausweise sehen, die wir
haben. Wir haben Ausweis eins. Lassen Sie uns einfach ID eins sprechen. 50 Sohn ist einer. Mal sehen. Funktioniert das? Das funktioniert. Wir können testen, ob Data
funktioniert. Wo war ich? Ich habe versucht, das zu kreieren
. Ja. Jetzt sind wir in der Lage, die endgültigen langfristigen
Beträge zu erhalten , und wenn wir sie
haben, können wir eine E-Mail
senden oder eine
E-Mail , die einer neuen E-Mail entspricht Platzieren Sie nicht einfach die Kunden-E-Mail mit den anderen
Punkten, geben Sie den Kundennamen Was dann noch? Geben Sie einfach die Kundennummer weiter
oder holen Sie sich die Kundennummer, geben Sie den Betrag
nicht weiter, sagen Sie nicht wahr, weil
es tatsächlich wahr ist. Das ist es, es zu vervollständigen. Dann rufen wir
den anderen Dienst an. Oder Eventservice.
Denken Sie daran, dass wir einen anderen Event-Service haben
, um unsere Veranstaltungen zu versenden. Dann nur um Zahlungen abzuschließen, Zahlungen
abzuschließen.
Zahlungen abschließen. Lassen Sie uns
die komplette Bestellung annehmen, die komplette Bestellung. Senden Sie
die komplette Bestellung ab. Ich möchte die komplette
Bestellung abschicken und ich möchte die E-Mail
senden. Wir senden
einfach die E-Mail. Dann lass uns etwas zurückschicken, vielleicht eine neue komplette Bestellung. Ich will ihnen keine Details, ich will
nur sagen, klar. Sag nicht wahr. Sag einfach,
Zahlung abgeschlossen ist wahr. Das funktioniert, oder? Das funktioniert. Um uns also um die Nullwerte zu
kümmern, verwenden wir ein JCN Include, platzieren wir JCN include non Das würde uns nur
darum kümmern, dass wir nicht den Nullteil des Teils
sehen, um den
wir uns nicht gekümmert Also dieser Teil des Adels
wäre nicht derselbe. Also, lass uns das erstellen
. Lass uns das erstellen. Ordnung. In Ordnung, also
lies im Grunde einfach dasselbe. Also wollen wir es einfach veröffentlichen
und das hier reinstellen. Lassen Sie mich die
vollständigen Zahlungen berücksichtigen. Das wird hier also nur Prägung
sein. Omnity Payments mit
weiteren Details,
dann die E-Mail, die E-Mail weiterleiten
. Hoffe, die E-Mail ist vollständig. Ja, die E-Mail sollte kopiert
werden, stimmt. Ordnung. Also das ist es
im Grunde. Dann möchte ich das
dann veröffentlichen. Nennen wir das. Nennen wir diesen Schritt Versuch, die Zahlung
abzuschließen, richtig? Damit veröffentlichen wir einfach. Dann kommen wir auch her, um zu
sagen: Lasst uns darüber nachdenken. Lasst uns über Kleinigkeiten nachdenken. Lassen Sie uns fertig sein,
sagen Sie einfach abgeschlossene Zahlungs-E-Mail. Ja. Wenn du das hast, brauchen
wir einen Zuhörer, einen Zuhörer
für diese komplette Bestellung Sie müssen in den
Kommentarleitfaden gehen , um diesen Leitfaden zu implementieren Sie müssen ein leeres Mitspracherecht
haben, um eine endgültige vollständige
Bestellung zu erhalten, eine vollständige Bestellung. Anwendungsmodul-Listener, das heißt
Lass uns einfach SOUT machen lass uns ein Protokoll verwenden, so wie wir
immer die Log-Informationen benutzt haben Nur ein Listener, der
im Listener empfangen wurde , sagen wir,
komplette Reihenfolge, empfangen Dann können Sie optionale Zahlungen sagen. Also Bezahlung, sieh dir einfach die
optionalen Zahlungen an. Zahlungen, es kostet das
Depot, Bußgeldzahlungen
verwenden wir, entschuldigen Sie sich mit Gs Erhalten Sie Zahlungen per Ausweis. Sie haben die abgeschlossenen
Zahlungen oder die Kennung. Dann lass uns das etwas nach oben verschieben. Dann nehmen wir diesen
Weg. Wir haben das. Ja. Ich muss nur
sagen, wenn das vorhanden ist, wählen
wir einfach die Zahlungen aus,
optionale Zahlungen, dann machen
wir einfach Zahlungen. Satz
A legt den Status abgeschlossen fest, setzen den Status auf
Zahlungsstatus abgeschlossen. Dann Zahlungsdepot
, das ist sicher. Ich denke, damit ist es erledigt.
Denken Sie daran, dass wir den
E-Mail-Service bereits
bereitgestellt haben, falls dies zutrifft Also das ist oder ist nicht
vollständig, oder ist vollständig. Ich erinnere mich, was
wir hier tun, sagen oder was hier vollständig ist. Ich treibe das voran. Ich denke
, damit ist es tatsächlich erledigt. Ich denke, es gab noch eine
andere Sache, auf die wir
nicht geachtet haben , wenn Sie
sich das genau ansehen Darauf ist nicht zu achten und das
ist die abgeschlossene Bestellung. Ich schicke diesen Kerl raus. Es ist auch eine Veranstaltung und wir haben uns
nicht darum gekümmert Das sollte im Grunde
auch nur als E-Mail gelten. Haben wir
das Domain-Event eingeführt, ich glaube, ich habe
das nicht gemacht, mach das. Ich sage einfach, implementiert
Domänenereignisse, Domänenereignisse von Molekülen. Das Gleiche hier, implementiert
Domänenereignisse von
Jolecles. Wenn das so ist,
bedeutet das auch, dass ich
hier eine benutzerdefinierte Markierung
platzieren muss , eine benutzerdefinierte Das tue ich nicht. Ich glaube, ich
verkompliziere die Dinge, wenn ich das
platziere, lass uns einfach die Reihenfolge festlegen. Das erforderte, dass wir etwas benötigen
, also lassen Sie mich das einfach so nennen ob
es sich um
abgeschlossene Auftragsbestätigung handelt. Lassen Sie mich einfach
etwas anderes erstellen als abgeschlossene Auftragsantwort bezeichnet wird. Ich habe die Antwort auf die Bestellung abgeschlossen. Ja. Das wird funktionieren. Das wäre kein
Ereignis mehr, nur eine einfache Antwort. Ich gebe einfach ein Goldbarren zurück, ich arbeite einfach, dann
brauche ich das nicht mehr. Äh, ich bin noch dabei. Also, mein Szenario. Dann brauche
ich das nicht, weil wir es nie mehr benutzen, oder? Dann kann ich dann eine benutzerdefinierte
Markierung an der benutzerdefinierten Markierung platzieren. Dann Aktion, Ereignis, Aktion. Ich habe
diese Aktion noch nicht erstellt, also Cores Aktion Zahlung Dies sollte
auch eine Zahlung sein,
aber ich möchte, dass es sich um eine
Aktion handelt, die Zahlungen abschließt, also abschließt.
Nennen wir sie C. Actions
schließt Zahlungen ab. Vollständiger Unterstrich der Zahlung. Das funktioniert. Ich werde dann hier reingehen, um
diese vollständige Underscore-Zahlung zu erstellen . Ich komme her und
mache das einfach. Ich werde ein C. Ich
komme wieder her. Richtig. Denken Sie daran,
dass dies automatisch für uns geladen wird, sodass wir uns nicht
darum kümmern müssen. Das ist eine coole Sache,
weil wir
die Implementierung
in diesem Setup bereits durchgeführt haben , also alles
machen, was wir brauchen, ohne uns darum
zu kümmern Also wenn das Entlüften Sinn hat, wird
das auch hineinkanalisiert
, denn denken Sie daran, dass der Anwendungs-Runner die Arbeit
tatsächlich für uns erledigt Ich denke, wir sind gerade an einem guten Ort
, an einem guten Ort. Wir kennen die
Umsetzung nicht. Ich denke, wir wollen.
Lass uns das testen. Lassen Sie uns diese abgeschlossene
Bestellung testen. Lass uns das testen. Lass uns hier reingehen, oder? Lass uns einfach Bots auswählen.
Lass uns hier reingehen. Gehen wir hier rein. Lass uns eins nach dem anderen schieben
. Dieser sollte sein. Ich denke, ich
möchte, dass dies auch ein Beitrag ist. Poste ein Post-Mapping. Dann ist das der Spiegel,
ich nenne das einfach als abgeschlossen, es ist abgeschlossen. Lass uns das hier hinstellen. Das ist richtig. Ja. Also das wird
welche Kennung enthalten. Wählen Sie Ihre Kennung
aus und stellen Sie hier die Verwendung
ab, was funktioniert. Lass mich das einfach
auf Z vier ändern. In Ordnung. Dann ändern wir
die E-Mail einfach auf vier. In Ordnung, lassen Sie uns das vorantreiben. Ich denke, wir sollten
etwas anderes machen. Was sind vielleicht die Objekte
, die wir im Inventar haben? Lassen Sie uns das bestätigen. Wir
haben einen Zeichenblock. Lass uns das
Zeichnungsteil verwenden. Lass uns das einfach in Zeichnungsteil
L ändern und daraus eine Sechs machen. Lass uns das nochmal machen. In Ordnung. Schauen wir uns das andere
Inventar in der anderen Tabelle an. Das ist die andere Tabelle, Z
vier, das ist die letzte. Lassen Sie uns überprüfen, was die Kennung
ist. Das ist deine Kennung. Gehen wir zurück zu unserem Drehbuch. Dann platzieren wir die
andere Kennung hier, lassen Sie uns das wahr machen.
Lass uns das posten. Nicht gefunden. Was wir machen. Lass mich sehen. Wenn ich sage, dass das nicht gefunden wurde, schließt O die
Suche danach ab. Dieser Teil
wurde nicht gefunden. Lass uns nachschauen. Ich glaube, Mama hat hier etwas
vermasselt. Es ist abgeschlossen. Angenommen, was haben
wir falsch gemacht? Lass uns sehen. Hier ein Breakpoint. Lass uns nochmal
drauflos. Lass uns sehen. Es wurde nicht gefunden. Es bedeutet
etwas, das ich nicht richtig gemacht habe. Schauen wir es uns richtig an.
Das ist der erste Typ diese
Bestellung direkt
durchgegangen ist, dann diese Bestellung mit Schrägstrich abgeschlossen, oder ist das ein Pfad, den ich hier angegeben habe Lass uns sehen.
Nur so leid, ich habe die Anwendung nicht neu gestartet Ich glaube nicht, dass ich die
Anwendung neu gestartet habe, lassen Sie uns das neu starten Ich konnte es nur nicht finden, konnte es nicht finden, weil ich es nicht neu
gestartet habe Jetzt hätten wir es
wahrscheinlich finden sollen. Lassen Sie uns darauf eingehen und ich
gehe davon aus, dass ich einfach die Wahrheit sage. All das ist wahr. Warum hast du es mir gezeigt
oder nicht? Lass uns sehen. Ich dachte nicht,
ich hätte das nicht benutzt. Schauen wir uns das an.
Oh, tut mir leid, tut mir leid, es
tut mir leid, dass es abgeschlossen ist
oder beantwortet wurde. Ich habe diese abgeschlossene Antwort nicht gemacht.
Vollständige Res-Pose. Stimmt. Ja. Ja.
Stimmt. Lass uns damit anfangen. Ordnung. Lass uns
sehen, dass das wahr wird. Ich mache das einfach
nochmal. Ja, stimmt. Lass uns die Zahlung überprüfen.
Ja, wir können das alles sehen. das ist tatsächlich
hier. Das haben wir. Das ist unvollständig.
Warum ist das unvollständig? Sollte nicht unvollständig sein.
Lassen Sie uns bestätigen, was wir getan haben. Das ist die komplette Bestellung, die komplette Bestellung wurde bis zum
kompletten Event versendet. Wir
vervollständigen diese Kabel für unsere Ereignisse. Wir geben hier die komplette
Reihenfolge der Ereignisse an. Computer-Veranstaltung. Wir kommen her, schauen uns die kompletten Ereignisse an, spielen
wir das aus. Ich würde reingehen und diese Kennung
wählen. Ich würde das hier reinschieben. Schieb das hier rein. Dann
lass uns wieder wie sie rennen. Lass mich die Logs überprüfen. E-Mail mit dem Versuch
, die Bestellung zu bezahlen, abgeschlossen, okay. Lass uns nachschauen. Ich sage nicht diese vollständige Reihenfolge,
also was passiert? Lassen Sie uns das bestätigen. Ich denke, das ist der Grund, warum es das eigentlich nicht ist.
Deshalb ist es noch nicht abgeschlossen. Bestätigen Sie, was passiert. Geschlossen, es sind zu viele Tabs geöffnet. Lassen Sie uns alle Tabs schließen. Lassen Sie uns alle Tabs schließen. Lass uns reinkommen, das hier machen, den Kerl
schließen. Dann rufen wir das an
und das geht rein, dann die Veranstaltung, schauen wir uns
den anderen Event-Service an. Mal sehen, was der andere
Event-Service macht. Event-Service veröffentlicht
die andere Veranstaltung, die gesamte Bestellung
veröffentlicht die E-Mail. Der Versuch hat gedauert, damit
wir uns das ansehen können. Dies enthält ein
vollständiges Bestellzeichen. Hier. Lass mich nachschauen. Ist das hier? Ja. Ja, das wurde geladen,
komplett oder markiert. Das ist großartig. Du
identifizierst dich als das. Die Frage ist dann, gehen
wir hier rein. Sie haben die anderen Ereignisse. Die anderen Ereignisse verteuern
diese Zahlung, dann dieser Typ. Schauen wir uns den Kerl noch einmal an. Veranstaltung abgeschlossen. Der abgeschlossene
Teil wird gerade bearbeitet. Was passiert Das ist
das Problem, das wir haben. Dieser drängt nicht auf
das Abgeschlossene oder. Lassen Sie mich meinen
Zuhörer noch einmal bestätigen. Der Zuhörer geht die Reihenfolge „
Erledigt“ durch, okay? Ich habe dafür nachgelesen, lassen Sie uns den
Namen einfach in Completed Order ändern Ich bin mir nicht sicher, ob das ein Problem ist.
Bestellung abschließen. Bestellung abschließen. Ordnung. In Ordnung,
also das ist richtig, lassen Sie uns das neu starten, damit ich nach dieser Bestellung suche,
die diese Kennung hat, dann sollte ich in der Lage sein, diese Logs
zu sehen. Wenn ich dieses Protokoll sehe,
das geworden ist, wenn ich diese Protokolle
nicht sehe,
dann ist das das Problem. Dann lass uns das sehen. Lass mich hier reingehen und
versuchen, das abzufeuern. Lass uns sehen, was
passiert. Das ist wahr. Dann schauen wir uns die Logs an. Ich versuche es. Ich
kriege die Teile nicht. Die E-Mail, die Sie mit dem
Versuch, die Bestellung abzuschließen, senden , um die Zahlung
abzuschließen, richtig? Wo war das Protokoll? Der Versuch, die
Zahlung abzuschließen, sendet seine, dann empfängt dieser Listener
sie nicht Ich habe es in diesen
Listener bekommen. Lass uns das Video einfach hier
beenden.
Das ist ziemlich lang. Lassen Sie uns dieses Video beenden,
dann werden wir zurückkommen, um zu
sehen, warum das nicht der
Fall ist. Danke.
34. Zahlung 3 implementieren: In Ordnung Leute, ich
konnte das Problem finden. Das Problem ist das.
Der Fehler oder das, was ich ausgelassen habe, war also dieser. Dies würde niemals registriert
werden, wenn Sie die
Transaktion nicht verwenden würden, oder? Das habe ich also verpasst. Das war nicht da,
bevor ich es wieder hinzugefügt habe. Ich denke, alles
hat gut geklappt. Schauen wir uns also
die Zahlungstabelle an. Das ist unvollständig. Geben wir diesen anderen Bezeichner ein. Dann gehen wir zu Scotch
und lassen es uns hinter uns lassen. Lass uns das machen. In Ordnung. Ich habe den Breakpoint hier platziert. Dann Breakpoint, nur um zu
sehen, wie er hier reinkommt. Dann sehen wir, alles geht rein. Lass uns das jetzt überprüfen. Siehst du, es ist abgeschlossen. In Ordnung. Das
haben wir im Grunde versucht zu erreichen. Ich konnte ein bisschen
debuggen und das
konnte ich tatsächlich herausfinden Ja. Was
mir auch beim Debuggen geholfen hat, wurde beim Debuggen tatsächlich die Login-Ebene auf Debuggen
gesetzt und das
zu Ich sagte, ich versuche mich
zu registrieren, aber es wurde
sozusagen nicht registriert Dadurch konnte ich mehr Informationen erhalten. Ordnung. Ja. Lass uns das sehen. Wenn Sie sich das kritisch ansehen, können Sie das
meiner Meinung nach einfach ein wenig
untersuchen. Wenn Sie das
kritisch betrachten, werden Sie
feststellen, dass eine Publikation registriert wird, Sie würden sehen, wann
versucht wird, sich zu registrieren. Sie sehen, wenn es
versucht, sich zu registrieren. Aber ich konnte den anderen Teil nicht
finden, also konnte ich herausfinden, das Problem von
hier kam dass
das Problem von
hier kam und nicht von hier
wegkam. das kritisch betrachtete, sah
ich die Transaktion und in der
Dokumentation besser,
Sie müssen das verwenden, müssen Sie das
verwenden. Richtig. Jetzt können wir
das Gesamtkonzept
dessen, was wir eigentlich bauen
wollen,
fertigstellen das Gesamtkonzept
dessen, was wir eigentlich bauen
wollen und wir konnten alles
eingrenzen. das nächste, was wir von diesem Teil an
tun Ich denke, das nächste, was wir von diesem Teil an
tun wollen, ist zunächst, dass wir das wirklich speichern
wollen. Lass uns das speichern. Lassen
Sie mich ein Problem dafür erstellen. Nennen wir es jetzt einfach Zahlungen,
Implementierung, abgeschlossen. Die Implementierung
ist abgeschlossen. Entschuldigung, Leute, ich habe das auf meinem zweiten
Bildschirm angezeigt. Implementierung abgeschlossen, Implementierung
abgeschlossen, okay? In Ordnung, also ich werde
das einfach speichern. Also wähle ich einfach diesen Typen
und lass uns ihn einfach speichern. Also heißt es Commits
und dann Cos das. Oh, kein Wunder. Umsetzung. Okay, das habe ich verpasst. Lassen Sie mich
diese Implementierung einfach bearbeiten. Okay, ich denke,
es wurde aktualisiert, also können wir das schließen und wir werden weitermachen also lassen wir
Guardia scannen Ordnung, es wird
also Druck gemacht. Okay. In Ordnung. Ab dem nächsten Video schauen
wir uns
Dinge wie Validierung an. Wir fangen an, uns
Dinge wie Validierung, Ausnahme, C-Zeug anzusehen,
Leute, sehr coole Sachen, die kommen werden. Ich habe das nächste Video gesehen.
35. Ausnahme und Validierung: Leute, vielen Dank, dass ihr wieder
zu mir gekommen seid. Das ist Z hier. In Ordnung. Wir sprechen von
offenen Modellen, oder? Genau darüber wollen
wir sprechen. Jetzt konnten wir mehrere Modelle
untersuchen. Wir untersuchen im Grunde
die Schnittstelle. Das ist eine benannte
Schnittstelle. Ich wollte damit sagen, dass wir das
Unterpaket tatsächlich verfügbar machen können. Lassen Sie uns nun über
offene Modelle sprechen, oder? Wir könnten im Grunde genommen ein
Modell haben, das allen offen steht und das jeder zugreifen kann. Ein gutes Beispiel, dessen Einbindung in dieses spezielle Video die Ausnahme
ist, oder? Eine Ausnahme ist ein
sehr gutes Beispiel dafür, was wir einbringen können und das allen zugänglich gemacht
wird. Wir werden
die Ausnahme für
verschiedene Fälle haben und wir den globalen
Ausnahmebehandler
haben. Um das Ganze ein
bisschen interessanter zu
machen, werde
ich
die Spring Validation vorstellen, den
Spring-Bood-Validierungsstarter, der uns dabei
hilft, dies
auf sehr einfache oder
unkomplizierte Weise zu erreichen sehr einfache oder
unkomplizierte Weise Ich werde eine Bestätigung einreichen. Das ist die Bestätigung. Ich füge eine Bestätigung hinzu, dass wir sie
tatsächlich hier haben. Lass uns das einfach ein bisschen arrangieren
. Ich nehme das
und bringe es etwas
unterhalb von JPA Denken Sie daran, das Oder spielt keine Rolle. Ich denke, das ist nur die
persönliche Präferenz, oder? Stimmt, das haben wir also
geschafft. Mir ist auch
schnell etwas aufgefallen, das ich nicht wirklich erstellt habe. Ich habe das Modell nicht
wirklich erstellt, das Testmodell für E-Mail,
also lass uns das schnell machen. Ich werde es tun, bevor wir weitermachen.
Denken Sie daran, über ein separates Testmodul verfügen
muss dass jeder Modus über ein separates Testmodul verfügen
muss,
damit Sie den Überblick behalten
und sicherstellen können , dass
tatsächlich nichts kaputt ist.
In Ordnung. Also werde ich das tun. Ich werde einfach meinen Windows
- und Schnelltest aufrufen und
das Ganze als
E-Mail-Integrationstest bezeichnen , richtig? In Ordnung. KEIN Getreidetest. Okay, denken Sie daran, ich habe gerade
den Anwendungsmodtest hinzugefügt. Dann nur um alleine zu verifizieren, nur um zu verifizieren, und das
sollte eigentlich ausreichen Ich sollte eigentlich genügen. Ich rufe diese
Bestätigungs-E-Mail einfach an, wenn ich eine E-Mail sende. Wenn ich eine E-Mail sende. Das sollte reichen. Dann bringen Sie den Test rein
und fügen Sie dann den Test hinzu. Wir führen das
tatsächlich zu einem späteren Zeitpunkt aus, um zu sehen ob alles noch sehr schnell
funktioniert. Ich werde sehen, dass alles immer noch wie erwartet
funktioniert, wollte
ich dann sagen. Lassen Sie uns jedoch schnell
einsteigen, um zu sehen, wie das für die Ausnahme
funktionieren wird . Fahren Sie fort. Ich werde ein Modul namens Paket
namens Exception erstellen. Ordnung. Dann werde ich eine benutzerdefinierte Ausnahme
erstellen. Ich glaube,
Sie haben es dieses Mal mit Modeling zu tun, also nenne ich es einfach
Modulate Exception Nur um die Dinge ein bisschen direkter
zu machen . Ausnahme modulieren Dann überschreiben wir einfach nur zwei. Dann lassen wir es ausweiten. Lassen Sie uns dafür sorgen dass es erweitert wird, eine Laufzeitausnahme. Dann überschreibe einfach zwei. Ich überschreibe den ohne Argument und schreibe
den mit der Nachricht. Ich glaube, das entwickelt sich. Ordnung. Welche anderen
Dinge brauche ich? Ja, ich möchte
daraus ein offenes Modell machen, und es tatsächlich zu einem offenen
Modell zu machen , ist eigentlich ganz einfach. Genau so, wie wir Dinge im Laufe der Zeit tatsächlich
haben. Dann habe ich die Paketinformationen. Dann habe ich dieses Mal das G. Ich
habe das G,
dann Spring Framework, die Module, das Dot
Application Model. Und dieses Mal, welche Art von Modul mache
ich dann verfügbar Bei dem Typ wird das
Anwendungsmodul geöffnet sein. Ich sage: Hey, Leute, lasst
diesen Kerl für alle offen sein. Das ist gut. Das ist gut. Mach das für alle offen. Ja. Okay. Dann, glaube ich, werden wir als nächsten
Schritt versuchen, die gesamte Anwendung durchzugehen. Lassen Sie uns alle
illegalen Argumentausnahmen und
alle anderen Ausnahmen durch
diese modulierte Ausnahme ersetzen alle anderen Ausnahmen durch
diese modulierte Ausnahme Wahrscheinlich
hierher zurückkommen und dann
die Dinge machen und dann die Dinge
ein bisschen besser handhaben, oder? Ich denke, das sollte
der nächste Klagegrund sein. In Ordnung, hier gibt es keine Ausnahme. Hast du im Setup
eine Ausnahme ausgelöst? Nein, wir haben
keine Ausnahme ausgelöst. Schauen wir uns das tatsächlich an, lassen Sie uns tatsächlich
auschecken, lassen Sie uns die Aktion sehen. Schau dir einfach diese Typen an. Ja, das ist ein Fall. Das ist ein Fall. Wir werden das ändern, um
zu modulieren. Wechseln Sie zu moderater Ausnahme. Wechseln Sie zur moderaten Ausnahme.
Nun, das funktioniert gut. Das funktioniert gut. Nun, wenn
wir das tatsächlich ändern, ändern
wir das tatsächlich. Lass uns weitermachen. Lass uns sehen. Denken Sie daran, es steht allen offen, also sollten wir
keine Fälle haben , in denen
tatsächlich etwas passiert. Hier können wir diese
Laufzeit tatsächlich verschieben. Statt Runtime, Hood
Modulate Exception, nur dieses System durchläuft, kann man einfach eine Nachricht bekommen.
Das funktioniert Lassen Sie uns dann die Aktion
des Ereignisses überprüfen. Die Ereignisaktion hat
nichts. Lassen Sie uns das Setup überprüfen. Schauen wir uns die Veröffentlichung der
Veranstaltung an. Hast du hier
gearbeitet? Ich glaube nicht, dass wir jetzt etwas getan haben. Nein, wir haben hier nichts gemacht. Lass uns das
Inventar durchgehen. Überprüfe den Service. Haben Sie
in diesem Service etwas aufgedeckt? Sehen wir uns die
Implementierung des Dienstes an. Oh ja. Wir können
das tatsächlich werfen. Also ja, das funktioniert. Dann denke ich, das
sollte es für diesen Kerl sein. Dann schauen wir uns das T. an. Hast du irgendwas in der gemacht? Nein. Lass uns zum anderen übergehen. Wir sind gerade dabei
,
alle benutzerdefinierten Ausnahmen zu ersetzen ,
wie ich es versprochen habe. Wir ersetzen gerade alle
benutzerdefinierten Ausnahmen, um
unsere All the Unto-Ausnahmen für unsere benutzerdefinierte Ausnahme
zu verwenden . Okay, schauen wir uns
den Event-Service an. Okay, nichts ist da.
Also das sieht gut aus. Schauen wir uns unseren
Typkonverter an, ja. Ja, der Typkonverter hat
auch einige Änderungen. Okay, das ist also gut. Das ist gut, oder?
Das ist gut. Das kommt eigentlich nicht rein, also kann ich es
einfach vorstellen. In Töpfen. Also das ist jetzt in Ordnung. Ordnung. Ich kann das ausziehen. Ordnung. Was sonst? Lass uns sehen. Der Eventservice
hat nichts. O Service, hat
er irgendwas? Ich glaube, wir haben das schon einmal
durchgemacht. Das hat
für uns nichts zu bieten. Okay, das ist in Ordnung. Lass uns die Zahlung überprüfen. Die Zahlung sollte über
den Konverter erfolgen. Lass uns das hier überprüfen. Lass uns das
einfach ändern. Jetzt können wir
das ändern und das sollte so
funktionieren, wie es ist, wie es heißen sollte. Wir haben also die Eingänge. Eingaben, dann
haben wir die Eingaben, dann haben wir das C, das Z, den Federkörper,
dann die Ausnahme, dann den Stern. Das funktioniert. Okay. Schauen wir uns den Event-Service an. Der Eventservice hat nichts. Ordnung, wir
konnten also
alle Ausnahmen
innerhalb der Anwendung ersetzen . Also das war gut. Also, wenn
jetzt eine Ausnahme angezeigt wird, würde diese gestrichen werden. Nun, wir wissen, dass
wir bei der Auslösung einer Ausnahme offenbar
einen allgemeinen Handler brauchen, oder? Lassen Sie uns also weitermachen und
einen globalen Ausnahmehandler erstellen. Ich bin mir sicher, dass ihr schon daran
gewöhnt seid. Wir werden das
einfach schnell ansprechen, es eine globale oder eine globale Ausnahme
nennen. Exception-Handler,
globaler Exception-Handler und das sollten Ratschläge zur
Restkontrolle sein. Lassen Sie uns die
Ratschläge kontrollieren. Mitglied, das ist auch eine Komponente.
Wir checken durch. Das ist eigentlich nur das
Schreiben eines Controller-Ratschlags, verantwortlich für die Minute für die
Pause, es funktioniert im Grunde. Wenn du bei diesem Typen nachschaust, ist das auch eine Komponente, die gescannt und erkannt werden muss. Ordnung. Damit, dann lass uns ein, weißt du was, vorstellen? das haben, damit wir
weitermachen können und Überschreibungen können einige
Methoden überschreiben Siehst du, kann die Methode lesen
? Nicht so. Wenn Sie die Methode schreiben möchten, Sie wahrscheinlich
wahrscheinlich wollen Exception-Handler der
Antwortentität
grundsätzlich erweitern ,
und das gibt uns Zugriff. Das gibt uns Zugriff auf. Ich denke, ich bin mehr an der Ausnahme für
das Methodenargument interessiert Ausnahme für
das Methodenargument denn sobald wir tatsächlich versuchen von der API aus
darauf zuzugreifen,
und wir haben einen Hauptteil Anforderungstext
oder einige Dinge auf
dem Controller, die erkannt
werden und wir können einfach eine Ausnahme auslösen Lassen Sie uns überprüfen, ob das
Methodenargument nicht gültig ist. Das ist gut. Aber
anstatt das zu tun, ist
das für mich eigentlich
übertrieben Wir können nur, damit du das
einfach abnehmen kannst, werden das alles
nicht nutzen, und ich werde einfach
den Override entfernen Wenn ich das mache, hilft
mir
das, dass ich hier
einfach den
At-Ausnahme-Handler einfügen kann hier
einfach den
At-Ausnahme-Handler einfügen Im Exception-Handler wollen wir
dann das Methodenargument
behandeln,
keine gültige Ausnahme Das ist ein Anwendungsfall für Subs. Dann lass uns das auch
überprüfen. Lassen Sie uns die ModuliteCeption behandeln, ja,
die ModuliteCeption Fügen wir eine Modellausnahme hinzu. Rufen Sie also diese Public
Response Entity an. Ich denke, wir brauchen
eine Rückgabemethode. Nennen wir es einfach Antwort, oder? Nennen wir es Antwort. Nennen wir das und kümmern uns um
Modulif ModuLifeCeption. Okay, das funktioniert. Dann nenne
es ModuliteCeption, Dann schnapp dir das einfach. Dann bringen wir einfach
das Copy & Paste rein. Wir ändern diesen Typen einfach in. Dann müssen wir uns um die Fehler
kümmern. Wir müssen mit den Fehlern umgehen. Lassen Sie uns über diese Teile nachdenken. Lassen Sie uns ein
wenig darüber nachdenken, um die Fehler zu beheben. Wie ich bereits erwähnt habe, sollten wir wahrscheinlich eine
Antwort haben. Lassen Sie uns eine Antwort haben.
Nennen wir das Antwort. Ich sollte im Grunde genommen ein Rekord sein. Ich sollte ein Rekord sein. Im Grunde wollen
wir einfach nur zurückkehren. Sagen wir diese Zeichenfolgennachricht
und den HTTP-Status, richtig? HTTP-Status. Ich denke, das funktioniert Also genau hier, du kannst es dann ja, also ist das okay. Dann
wollen wir auch grundsätzlich
die Ausnahme aus
dem Bindungsergebnis lesen die Ausnahme aus
dem Bindungsergebnis wenn wir tatsächlich die Methode verwenden. Denken Sie daran, dass die Ausnahme für das
Methodenargument tatsächlich an Stellen auftritt, an denen wir so etwas tun , wo
dieser Typ anscheinend
einige CSR-Notationen zur Validierung platzieren wird einige CSR-Notationen zur Validierung Aus diesem Grund führen wir
diese Starter-Validierung ein. Mach das. Lass uns schnell einfach
lesen, lass uns von dem lesen wir
von diesem Typen. Okay, was soll ich tun? Lass uns sehen. Für dieses
Methodenargument haben
wir vielleicht eine Liste, oder? Wir haben eine Liste von Fehlern. Lassen Sie uns einfach eine Karte zurückgeben, eine Karte, und dann
darüber nachdenken
, ob wir eine Nachricht haben, ist
eine Nachricht in Ordnung, dann können Sie
eine Fehlerliste haben Lassen Sie mich das
so einfach wie möglich machen. Machen wir es so
einfach wie es ist. Ich möchte Zehner nicht komplizieren, Sie können Ihre Bedürfnisse tatsächlich
ändern Drehen Sie einfach eine
Zeichenkettenliste um, da dies mehreren Fehlern führen
kann Lass uns einfach eine Liste
von Zeichenketten daraus machen und das funktioniert. Von hier aus haben wir
eine Liste von Zeichenketten, Liste von Zeichenketten, ich denke,
es ist besser, wenn ich einfach von der rechten Seite Lassen Sie uns
diese großartigen Binärdateien ausnehmen. Das macht eigentlich einfach
alles, was ich brauche. Dann will
ich von diesem Typen für jeden ein Nein? Ich möchte den Stream beenden,
Stream nach dem Streamen,
dann möchte ich die Karte erstellen. Dann möchte ich den
Feldfehler zuordnen, den Feldfehler. Ich möchte den Feldfehler bekommen, ich nenne ihn Feldfehler. Dann benutzen wir die
Methodenreferenz Methodenreferenz und bekommen dann die falsche Nachricht. Dann ist Liste. Ich denke,
das funktioniert richtig. Ich denke, dieser zusätzliche
Binärrest weist nur wenige Fehler auf. Wir brauchen wenige Fehler,
nicht alle Fehler. Wenige Fehler, wenige
Fehler. Das funktioniert. Dann können wir von hier aus
ableiten. Liste der Let's Call
the Feldfehler. Die Rückgabe einer neuen Antwortentität, dann denke ich, sollten wir schnell die private
Methode verwenden, die einfach in eine Liste von Feldbenutzern einfügt
, was
das Ganze nur einfacher macht Komm her, privat. Private, private Map-Map, dann eine Zeichenfolge, dann eine Liste mit
Zeichenketten, dann nennen wir
es einfach Gets error Era,
dann string, dann Feared Error. Okay, das funktioniert super. Was wollen wir dann hier machen? Wir wollen einfach den neuen Hash
beenden. Okay. Dann
wollen wir sagen, Ratten raus. Oh. Unglaublich.
Nennen wir es Fehler. Fehler. Dann geben wir die
Feldspieler rein, geben einfach die Karte zurück hierher zurückkommen, rufen wir
einfach die Gets R-Map auf und geben
dann die Fühler und
Filter ein, das funktioniert Dann ruf einfach die Netsts an und
schau, was der Typ denkt. Nimmt die Karte. Es ist auch gut, Header zu übergeben. Ich sage neue HT-Header, dann GTP-Status, P-Status Status, die Batterieanfrage. Batterieanfrage. Ich denke,
das funktioniert. Das funktioniert gut. Dann wollen wir nur die Antwort zurückgeben
,
wir sagen einfach, neue Antwortentität zurückgeben. Dann nennen wir
es einfach eine neue Antwort. Neue Antwort, sagen wir, x
erhält eine
lokalisierte Nachricht,
dann den TP-Status, schlechte Anfrage, schlechte Anfragen. Schlechte Anfrage, dann benötigt dies auch die fehlerhafte Anfrage, die Anfrage
hatte. Richtig. Also nur eine einfache,
einfache
Ausnahmeregelung , nur um tatsächlich
Szenarien zu berücksichtigen Ich denke, wir haben es gut gemacht. Ich glaube aufrichtig, dass
wir uns gut geschlagen haben, oder? Ich glaube,
wir haben uns gut geschlagen. Also,
das ist jetzt ein
typischer Fall , wenn man nicht die Ausnahme
hat. Nun, das wird für alles
generisch sein. Wir müssen es zulassen. Wir müssen dem Modell mitteilen, welche Module vererbt
werden, hey, hey, Leute,
bitte rechnet damit, diese Abhängigkeit
vom Ausnahmemodell, dem Ausnahmemodell,
zu
verwenden . Der typische Fall
wäre
der Fall der Bestellung. Wir gehen zum O-Modul. Wir wählen das, du kannst sagen: Hey, erwarte
auch Ausnahme
von Ausnahme, richtig? Ausnahmemodell. Auf die
gleiche Art und Weise,
wie wir das machen können verwenden wir es bei diesem Typen? Benutzen wir es hier?
Ja, wir verwenden es hier. Auf der rechten Seite
können wir das einfach
für denselben Typen kopieren .
Das einfach kopieren? Dann legen Sie es in das Inventar , weil wir es anscheinend jetzt mit Inventar
verwenden, platzieren Sie es im Inventar. Das ist im Inventar,
also brauchen wir das alles nicht. Sie wollen nur die Ausnahme
aufdecken. Aber Sie erwarten dies auch
innerhalb einer Ausnahme. Event-Publikation benutzt es, dieser Typ, den wir jetzt
benutzen, sind wir? Ja, wir benutzen es. Wir können das
benutzen. Wir können das benutzen. Wir verwenden es einfach in der Basis. Du kannst einfach das
Gleiche aus dem Inventar nehmen. Sind wir Anymil? Nein. Da du es dort
benutzt, kannst du es einfach hier
platzieren, oder? Platziere den Kerl auch hier. Also ja, der Anwendungsfall ist gelöst. Bevor wir weitermachen, lassen Sie uns diesen Test schnell durchführen. Wenn wir dann diesen Test durchführen und
es keine Fehler gibt, dann ist dieses Video schon sehr,
sehr lang. Kommen Sie dann zurück
, um
die Validierung und die Notationen tatsächlich
auf den Objekten zu platzieren , richtig? Bei den Objekten, die Sie tatsächlich
als Anforderungstext eingeben, können
Sie mit einigen Tests beginnen
, um zu sehen, ob das tatsächlich korrekt
funktioniert In
Ordnung, lassen Sie uns das einfach testen um sicherzugehen, dass
nichts kaputt ist Okay, wir können sehen, dass
etwas läuft, etwas schief läuft, oder? Schauen wir uns also an, was
mit der Zahlung passiert ist? Wir haben es nicht bezahlt? Offenbar beschwert sich Payment
bereits. Lass uns herkommen. Lasst uns hier eine Ausnahme
platzieren. Zeigen Sie, dass dies
wahrscheinlich das Problem sein wird. Ausnahme. Ausnahme.
Also gut, jeder andere sieht gut aus Jeder sieht gut aus. Okay, lassen Sie uns jetzt die
Zahlungen einholen, richtig? Lass uns zur Bezahlung rennen. Lassen Sie uns sehen ob die Zahlung jetzt in Ordnung ist, denn ich glaube, das ist es,
worüber sich Payment
im Grunde beschweren wird , oder? Leute, ich weiß, dass diese Videos
sehr lang werden. Ich möchte nur sichergehen, dass wir einen sehr guten Meilenstein erreichen, anstatt zu Fixes und Bugs
zurückzukehren. Okay, siehst du, das ist jetzt
in Ordnung. Das ist in Ordnung. Schauen wir uns also an, was mit dem Inventar
nicht stimmt. Ich denke, das Inventar lief
auch nicht. Mal sehen, warum Eventual nicht
lief. Lassen Sie uns also das
Inventar testen, oder? Inventar, was ist das
Problem? Was habe ich falsch gemacht? Mal sehen, was passiert.
Okay, ich checke aus. In Ordnung, Eventr ist auch glücklich. Also ist alles glücklich. Also gut, Leute. Also komme
ich zurück Ich kann mich nicht festlegen. Ich werde das nicht gleich hier
begehen. Ich will das
alles zusammen beenden. Ich werde zurückkommen. Ich kümmere
mich tatsächlich um die anderen. In Ordnung, vielen Dank, dass Sie
zu mir gekommen sind. Bis zum nächsten Video.
36. Ausnahme und Validierung 2: In Ordnung Leute, vielen Dank, dass ihr
zu mir gekommen seid. Ja, richtig. Diese Ausnahmebehandlungsroutinen waren tatsächlich Teil des Modells
für die Ausnahmebehandlung. das, was wir überprüft haben, konnte ich
mit ein paar
fertig Für all das, was wir überprüft haben, konnte ich
mit ein paar
fertig werden. Wir haben
die gesamte benutzerdefinierte Runtime-Ausnahme in
diese
Runtime-Ausnahme geändert , die Ausnahme regulären Argumenten in unsere benutzerdefinierte Ausnahme Wir können tatsächlich
das globale Ausnahme-Handle erstellen . Wir werden das
testen. Wir setzen Breakpoints, wir können sehen, ob das wie
erwartet
funktioniert. Alles klar? Als Nächstes möchte ich
, dass wir gehen, ich glaube, der einzige Controller, den wir haben, ist der andere Modus, oder? Das ist das andere Modul. Dieses andere Modul, wir
bekommen tatsächlich das und das oder Leute. Fangen wir an, eine
benutzerdefinierte Ausnahme zu platzieren. Fangen wir an,
unsere Notation darauf zu platzieren. Bitte beachtet, ihr könnt es
verwenden, es wurde deklariert, ihr könnt die
Validierung für Aufzeichnungen verwenden. Ich bin mir sicher, dass
einige Leute es nicht
wissen , manche Leute wissen tatsächlich etwas darüber, aber du kannst es direkt
darauf platzieren und es funktioniert gut, hat keine, du
hast keine Nachteile. Das war wirklich gut.
Ich platziere es einfach. Ich werde dafür sorgen, dass die
Saiten, die ich verwende, nicht leer sind. Nicht leer, und
ich werde nur eine Nachricht senden. Ich sage nur, dass der
Kundenname nicht leer sein darf. Kann nicht leer sein.
Kann leer sein Ich denke, das Gleiche
gilt für E-Mails. Ich rufe diese
Kunden-E-Mail einfach an. Kunden-E-Mail Economy ist leer. Wenn Sie dann die Liste der gültigen Websi-Liste
kennen, schreiben Sie einfach physisch „gültig“ darauf, „gültig Tragen Sie einfach eine gültige Nummer darauf ein. Die gültige Anzeige sollte
von Jakarta Validation aus angerufen werden. Dann kannst du hineingehen
. Diese gültige Anzeige löst die Validierung aus. Diese gültige Anzeige löst die Validierung bei diesem Typen aus. Lassen Sie mich das einfach
so arrangieren, dass wir es richtig strukturieren
können. Ja, wir können das machen. hierher zurückkomme, kann ich
auch sagen, dass der
Inventarname nicht leer sein darf, dann die Menge. Lassen Sie uns
die Bestätigung hier platzieren. Verwenden wir mindestens Amin. Offenbar wollen wir
keine negativen Werte. Wir sagen einfach das Minimum, sagen wir
einfach, dass das Minimum, das
wir wollen, eins ist, dauert lange, wenn Sie das überprüfen, benötigt einen langen Wert und
platziert die Nachricht. Bei der Nachricht sagen wir
nur den Wert, der Wert muss
groß sein , größer als Null. Eins ist also auch
akzeptabel, oder? Besser als Null. Also das funktioniert. Ich denke, wir
müssen das testen, oder?
Wir müssen das testen. Also werde ich
diese Anwendung einfach schnell ausführen . Ich
führe diese Anwendung aus. Lassen Sie uns das zeigen,
lassen Sie mich einfach
meinen Docker Compose ausführen nur um sicherzugehen, dass alles
läuft Okay. Okay, der Typ hat
gut angefangen. Bewerbung zum Studium. Stattdessen Bewerbung, dann
lassen Sie uns einige Anfragen abfeuern. Ich werde das verwenden, was wir wie zuvor verwenden
werden, aber dieses Mal werde ich
einfach einige Werte weglassen Lass uns diese Arbeit einfach beenden. Wissen Sie was? Lauf Lass
mich im Bug-Modus laufen. Lass uns im Debug-Modus laufen.
Stellen wir sicher, dass die Dinge in unsere Ausnahmeschicht gelangen Ich gehe hier rein, ich platziere
den Breakpoint hier,
ich platziere den Breakpoint Für den Controller werden
alle Anmerkungen
tatsächlich platziert, alle Anmerkungen werden
tatsächlich dort platziert Wir gehen davon aus, dass die Dinge
nicht über diesen Teil hinausgehen sollten. Ja, das erinnert mich daran, dass wir hier ein
gültiges als gültig angeben
müssen. Bitte, das ist wirklich wichtig. Das andere ist wirklich wichtig.
Der andere in der Sache. Ich weiß wirklich nicht
warum, aber ich habe herausgefunden, dass Sie das Gültige
hinter dem Anfragetext platzieren müssen. Wenn Sie das Gültige
vor dem Hauptteil der Anfrage platzieren, wird es nicht ausgelöst.
Es wird nicht manipuliert. Ich glaube, wir haben hier
etwas verpasst. Wir haben hier keine Notation
platziert, oder? Nein, nein, nein, nein, wir haben hier nichts
platziert. Das müssen wir tun, Leute. Wir müssen sicherstellen, dass das
nicht so ist, wir müssen das tun. Lass uns das machen, bitte,
es ist nicht leer. Ich bin nicht leer, leer, nein, nein, dieser Pinsel ist leer. Ich habe kein Leerzeichen, die
Nachricht anheften und die Nachricht ist ein anderer Identifier kann nicht
sein Oh, das ist erforderlich. Sagen wir einfach, es ist
erforderlich,
außer dass keine
Decken erforderlich sind Wir benutzen einfach
dasselbe für die anderen Leute. Wir wollen uns sicher sein, wo du bist? Lass uns sehen. Es ist erforderlich. Also, was ist erforderlich. Sollte nicht größer sein
als erforderlich. Es ist erforderlich, ist erforderlich. Ich denke, das funktioniert. Lass
uns im Bug-Modus laufen. Wir
versuchen also nicht wirklich, Zahlungen zu leisten. Sie möchten nur
sicherstellen, dass die Dinge nicht wirklich durchgehen. Wir versuchen nur sicherzustellen, dass
wir die Ausnahmen rückgängig machen. In Ordnung, also lass uns
zu einem Rubbelschläger gehen. Ein Kratzer. Hier wurden
wir gefeuert, Elia. Lass uns sehen. Lassen Sie uns das 55 nennen. Lass uns das leer machen. Lass uns das leer machen.
Name der Erfindung. Lass uns das leer machen. Stimmt? Dann lass uns das klären. Lassen Sie uns das ausführen. Lass uns sehen. Ordnung, kannst du
sehen? Das war in der Lage, unsere Methode als
ungültig
auszuwählen, weil das
im Grunde genommen das ist, was sie
auswählt, wenn sie
den Controller erreicht und die von Ihnen
übergebenen
Anfragetexte nicht validiert sind übergebenen
Anfragetexte nicht validiert oder wir
sie wahrscheinlich validieren und Fehler finden. Das ist es, was passiert. Wenn wir
einfach weitermachen, sehen Sie, wir haben bereits ein paar Fehler,
nämlich eine benutzerdefinierte E-Mail ist erforderlich, der
Name der Erfindung ist erforderlich. Ich erinnere mich, dass
wir genau das getan haben, wenn Sie hier nachschauen. Tatsächlich verschieben wir
diese Kunden-E-Mail und entfernen auch diesen Namen
der Erfindung. Lass uns das einfach bis zum
Ende laufen lassen. Lass uns eine Konsole nehmen. Das ist eine schlechte Anfrage. Wenn du reingehst, lass es uns
einfach noch einmal ausführen. Lass es uns
dieses Mal noch einmal ausführen. Lass es uns einfach veröffentlichen. Wir bekommen eine schlechte Anfrage. Wenn wir überprüfen, sehen Sie, Kunde nicht leer, Kunde, alles wurde korrekt
abgerufen, Standardnachricht
Inventarname ist erforderlich, Inventarname, wir sehen,
dass das gut funktioniert. Das funktioniert gut. Nun, wenn Sie mehr von diesem Debug gesehen haben,
der Grund, warum ich all
diese Debug-Meldungen gesehen habe, war,
dass ich Debug aktiviert habe, während
ich tatsächlich getestet habe Also habe ich
hier den Debug-Modus für das Modul aktiviert und diesen Typen, ich glaube, da wir
nicht debuggen, lass mich Das ist das Debuggen von Bildschirmmodulen. Lassen Sie uns das einfach auskommentieren
, damit wir die Dinge ein
bisschen besser zusammenfassen können. Lass uns das einfach neu starten. Fangen wir damit an und
führen den Test einfach noch einmal durch. Wir sehen genau, wie
es aussieht. Lass uns das einfach bewegen, ich
kann das sehen. In Ordnung. Also sehen Sie, wie unsere Ausnahme
tatsächlich eintritt. Wir konnten sehen, wie
die Ausnahme eingetreten ist. Aber lasst uns zu euch gehen,
wo ist das Ergebnis. Das Ergebnis wird immer in diesem Typen
gespeichert. Ich denke, es hat immer die Jason-Datei
gespeichert. Ich glaube, es ist der letzte,
aber ich bin mir nicht sicher, weil
ich diesen Typen für einen anderen
Test, ein anderes Projekt benutze. Also lass mich ganz sicher sein.
Das ist 24 auf sechs. Sehen wir uns sechs gegen eins an. Ich denke, es ist nicht
neu. Lass uns sehen. Okay. Lass uns das überprüfen. Okay, schauen wir uns das an. Schauen wir uns das an.
Schauen wir uns das an. Okay? Ich denke, wie öffne
ich das wieder? Lass mich einfach denken, dass es diesen Jason File Store
geben sollte . Ich glaube, es ist irgendwo
oben, das ich S zeigen werde. Siehst du das? Ja. Das ist es. Dann lass uns nach sechs oder zwei suchen. Siehst du, das ist der Fehler. Das ist die Antwort, die Sie
erhalten. Das ist die Antwort. Weil ich es wieder
vom HTTP-Client aus starte, ist
es genau die Antwort, die Sie erhalten, wenn Sie
von Postman aus starten, Sie erhalten genau das gleiche Ergebnis Ich möchte diesen Bildschirm einfach nicht
verlassen. Deshalb zeige ich es
dir von diesem Ort aus. Okay Leute, wir konnten bestätigen
, dass unsere
Ausnahme funktioniert. Jemand könnte sagen,
was ist mit dieser anderen Ausnahme? Was wir tun, ist nur die
Validierung dieses Abschnitts und dieser Ausnahme.
Was ist mit der anderen Ausnahme Bevor wir das tun, lassen Sie uns
schnell diese komplette Bestellung erledigen. Es gibt diese vollständige
Reihenfolge, die wir für die Modulation der Ausnahme
simulieren und dann sehen, wie
sie sich tatsächlich auswirkt. Wir müssen zeigen, dass
beides tatsächlich funktioniert. Gehen wir schnell wieder zum
Scratch-Teil über. Dann suchen wir nach
der kompletten Bestellung. Wir platzieren die komplette.
Dies ist die komplette Bestellung. Lass uns das einfach leer machen. Machen wir das leer
und lassen Sie uns den Kerl leiten. Siehst du, es kommt auch her, lass uns gehen, lass es uns überprüfen. Wir werden sehen, was die Fed oder Fünferseite tatsächlich benötigt. Wenn Sie zu Null zurückkehren, wenn Sie zu dem Ort zurückkehren, an dem
das tatsächlich gespeichert wurde, wie Sie sehen können, oder wenn eine
Kennung erforderlich ist. Ich konnte
zeigen, dass
ich das an einer anderen Stelle simulieren kann. Mal sehen, mal sehen,
mal sehen, mal sehen. Lass uns gehen, ich möchte
die Modult-Ausnahme simulieren, und genau das
möchte ich jetzt tun Gehen wir in den anderen. Ich möchte sehen, wie ich das
simulieren kann. Lass uns sehen. Wie kann ich das simulieren? Weil es hier keine
Int-Ausnahme gibt. Alles sieht gut aus. Wie wäre es, wenn wir uns
die komplette Bestellung und die
vollständige Zahlung ansehen ? Gut, gut, gutes CC, wir haben das hier.
Wir haben das hier. Lass uns das ändern. Ich habe vergessen , das zu ändern. Ich
habe das nicht herausgefunden. Wenn wir eine ID eingeben
, die nicht existiert, sollten
wir die
Order Identifier, not found, erhalten. Ich sage oder bestellen, nicht gefunden, mit
ID bestellen, sagen wir, bestellen. Mit ID, nicht gefunden. Ich werde das machen. Dann mit der
ID wurde die ID nicht gefunden. Ich platziere dann darin, ich vervollständige oder Punkte,
erhalte die Kennung. Lass uns das testen. Lass uns das testen. Lass uns das testen. Ich
platziere hier einfach einen Breakpoint,
kurz bevor er sie erreicht,
dann werden wir ihn einfach ausführen und sehen, wie
es funktioniert Lassen Sie uns, während das hier
bevorsteht, zu einer
Scotch-Bar springen . Das ist vorbei. Lass uns hier reinspringen.
Wir wissen, dass es das gibt. Wir wissen, dass es das gibt.
Lassen Sie uns einfach einen Buchstaben entfernen, weil er
nicht existieren wird. Lass uns das einschalten. Siehst du? Wir sind hier drin. Lassen Sie uns das
ausführen. Siehst du? Es geht tatsächlich um
die moderate Ausnahme,
was zeigt, dass dies auch überall
Tremolt-Exception Und das funktioniert auch. Wenn Sie sich
diese Teile hier ansehen , haben wir gerade
diese Anfrage gesendet. Siehst du, schlechte Anfrage,
bla, bla, bla,
Reihenfolge, in der dieser Schnee gefunden wurde, und
unsere Antwort, die wir definiert haben, die eine Nachricht enthält und sehen Sie, genau das bekommen
wir hier, nämlich diesen Typen, von
dem ich
spreche Dieser Typ tritt tatsächlich ein.
Die Dinge funktionieren also Die Dinge sehen gut aus, oder? Die sehen echt gut aus. Nun könnte mich jemand
fragen, was ist mit jeder anderen Ausnahme?
Wie gehst du damit um? jede andere
Ausnahme kann
als Laufzeitausnahme eingestuft werden Ich glaube, jede andere
Ausnahme kann
als Laufzeitausnahme eingestuft werden, weshalb wir
hier reingehen und
Laufzeitausnahmen behandeln können. Sie können hier reinkommen
und sich eine Laufzeit aussuchen. Wenn eine Laufzeitausnahme auftritt, wird sie
definitiv ausgewählt. Dies kann der Block
für eine Laufzeitausnahme sein. Sie können dies tun und andere Ausnahmen
können damit behandelt werden. Das ist vielleicht nicht
die beste Idee. Vielleicht wäre der beste
Ansatz
gewesen , eine Klasse
wie eine Basisklasse, eine Bs-Klasse oder
eine
Standardantwortklasse
zu haben Bs-Klasse oder
eine
Standardantwortklasse , die die Antwort aufnimmt Sie kehren zu Ihrem
Kunden zurück und erhalten dann generische T-Daten, PB-Daten, die Sie zurückgeben möchten Dann hat es ein
Fehlerfeld und Meldungen. Dann können Sie es
generisch machen, anstatt hier
und in dieser Antwort
eine Kartenliste zu verwenden . Sie können einfach dasselbe generische
Objekt sein, das zurückgegeben wird, dasselbe Objekt wird dafür
an die Benutzer zurückgegeben. Also ich denke, das
vervollständigt es, oder? Dieser Komplize. Wir sind in der Lage, unsere stärkere Bestätigung abzugeben Wir sind in der Lage,
Ausnahmen zu behandeln. Wir sind in der Lage,
die Notation, die
wir haben sollen, tatsächlich zu platzieren , und wir haben sie getestet und
das funktioniert hervorragend. Kundenvalidierung,
die gesamte benutzerdefinierte Validierung und Ausnahmebehandlung
ist gut, ist gut. Hast du einen Test für
die Ausnahme geschrieben , das hätte ich
fast vergessen. Vergiss kein Modul, oder? Du vergisst kein Modul. Ich werde das
einfach duplizieren. Ich werde es einfach duplizieren. Lassen Sie uns das
lieber codieren, lassen Sie mich einfach Ausnahme, Ausnahme,
Ausnahme zitieren. Ich werde den Test einfach beenden und ihn
Exception-Integrationstest
nennen. Oh, ich sage schon, es gibt auch Ausnahmen Oh,
ja, die Ausnahme sollte einen Test haben. Es gibt ein Modul. Jedes Modul
sollte einen Test haben, oder? Also das Gleiche, was wir hier machen. Also haben wir den Test des
Anwendungsmoduls. Dann
haben wir das für ungültig erklärt, dann verifizieren wir es. Nennen wir
es einfach verifizieren, oder? Dann ist das ein Test. Dann lass uns alles durchgehen. wir sicher, dass alles wie
erwartet funktioniert . Lassen Sie uns
all diese Tests bestehen. Nichts sollte kaputt gehen.
Alles, was kaputt geht ,
haben wir repariert, dann
nennen wir das Video. Wir schließen diese Videos ab. Schließ das. Lass uns diesen
ganzen Cancelo-Stop schließen, dann will ich
reinrennen und unsere Tests machen. Lass uns sehen Bezahlung, wirst du
mir irgendwelche Probleme geben? Ich hoffe nicht. Ordnung, wir sehen gut.
Darin sind wir gut. Ausnahme ist gut. Anstiftung
ist gut. Das ist gut Das ist gut. Era ist gut. Dann
ist Event Action gut, oder? Dann ist E-Mail-Anmeldung gut. Das ist also für dich zufriedenstellend.
In Ordnung, D. Das wurde
erfolgreich abgeschlossen Also, wenn ich zum nächsten Video komme, werde
ich
das festschreiben. Ich werde das begehen. Ihr solltet es also
eigentlich auf GitHub sehen. Ich werde es gegen Ausnahme
und Ausnahme und
benutzerdefinierte Validierung anwenden, sodass wir nicht einfach
auf das Video warten
müssen , um zu sehen, wie ich es mache. Und ich denke,
das nächste, was ich tun würde, wäre etwas
sehr Interessantes,
etwas sehr
Interessantes
anzufassen , und das wäre dann Dokumentation, oder? Dokumentation.
In Ordnung, danke Leute. Wir sehen uns. Das nächste Video.
37. Modulith-Dokumentation: Ordnung, Leute, vielen Dank, dass
ihr bis zu diesem
Zeitpunkt bei mir geblieben seid. Ja. Okay, jetzt habe ich
das letzte Video erwähnt , das wir in die
Dokumentation aufnehmen werden. Das Coole
an Spin Modulf
ist also , dass sie tatsächlich
eine Funktion hinzugefügt haben, mit der Sie Diagramme erstellen können Wir können tatsächlich
Diagramme erstellen, in denen du einigen von euch
zeigen kannst , wie der Mod tatsächlich
miteinander interagiert Ich denke, es ist eine sehr gute
Sache, die wir erforschen sollten, und genau das
werden wir in diesem Video tun. , ohne viele Worte zu sagen Lassen Sie uns, ohne viele Worte zu sagen, einfach loslegen. Das allererste, was wir tun
müssen, ist, dass wir eine andere Testklasse
erstellen müssen ,
eine andere Testklasse. Innerhalb dieser Testklasse würde
das
tatsächlich Dinge auslösen. Nennen wir diese
Dokumentation, oder? Wenn das erledigt ist, werden
wir eine Klasse erstellen. Nennen wir einfach den
Klassendokumentationstest. Dokumentationsdokumentationstest. Nun, das ist nicht Teil
des Spring Boots Tests, also muss ich
das ganz klar machen. Es ist nicht Teil des
Frühlings-Buchtests, also kannst du mit nichts weiter
kommentieren, oder? Dies ist jedoch das
Format, das es verwendet. Sie erstellen also tatsächlich
ein Anwendungsmodul. Anwendungsmodule erstellen
ein Anwendungsmodul. Warum macht Autocomplex das? Anwendungsmodul. Anwendungsmodus, der Modus, dann erstellen Sie eine Instanz von Anwendungsmodi,
Anwendungsmodi von Dann übergibst du
deine Basisklasse, du übergibst diese Basisklasse, richtig? Ich höre dich wieder. Du bestehst die
Basisklasse. Was ist die Basisklasse? Darin heißt es Spring Model
Case Fast Start. Also der Frühling, der Spring Moduli, die anwendungsübergreifende Klasse Sie geben diese
Basisklasse weiter, weil dieser Typ im Grunde
auf der obersten Ebene ist oder auf Root-Ebene
merkt , dass das tatsächlich
in all diese Module übergehen kann haben wir. Dann
erstellen wir nur einen Test. Dies wird im Grunde der
Auslöser sein. Wir erstellen einen Test. Was mache ich?
Testen, dann ungültig. Dann nenne ich es einfach Dokumentation
schreiben. Dokumentationen Ns. Eine
Dokumentation, Auszüge. Okay? In Ordnung. Also beginnen wir damit,
Neues neues Dokument zu sagen. Ja, neues Dokument. Dann werden die Module
übergeben, wir hier tatsächlich erstellt haben.
Den Modul übergeben Dann sag das einfach richtig. Richtige Module als Anlagen-UML.
Lassen Sie uns das zuerst untersuchen Lassen Sie uns diesen Teil untersuchen und ihn als Plant UML
schreiben. Also was wir tun, wir lassen das einfach laufen. Wir benötigen also keine
zusätzliche Konfiguration. Alles, was wir tun müssen,
ist den Test durchzuführen. Wir können also den
Maving-Test verwenden, um den
gesamten Test auszuführen , oder einfach die
Verknüpfung hier verwenden oder einfach den gesamten Test
ausführen Sobald wir den gesamten Test ausgeführt haben, sollten wir dann im Zielordner
den Zielordner sehen , der
für das Verschieben generiert wird . Wenn
Sie dann tatsächlich ein
Gdo verwenden, überprüfen wir die Datei gden But, um genau
zu sehen , ob der Test im Grunde genommen
ausgeschrieben Also lasst uns einfach beobachten, lasst uns das
beobachten, alles klar. Das ist erledigt, lassen Sie uns
das beobachten, wir sollten eine Datei haben. Alles klar. Sehen Sie,
wir haben eine Datei namens Spring Modulate Docs Lassen Sie uns in diesem
Frühjahr Modulate Docs erkunden. Das ist sehr hilfreich.
Alles klar. Siehst du? Das ist einfach genial.
Das ist einfach genial. Jetzt habe ich ein Plugin
hinzugefügt. Ich glaube, an den Namen des
Plugins kann ich mich nicht erinnern. Ich glaube, es heißt Plant UML. Es gibt ein Plugin
namens Plant UML, das ich installiert habe. Ich konnte mir
das tatsächlich besorgen Normalerweise ist es das, was du bekommst. Aber wenn Sie nicht
genau wissen, wie das geht, was passieren kann, ist, dass Sie
sagen können , ich glaube, ich habe es
zuerst mit Pflanzen erforscht. UML online. Ich pflanze UML online. Genau so
konnte ich es tatsächlich umsetzen. Ich pflanze UML online.
Dann kopierst du das alles Dann fügst du es hier ein. Dann füge es hier ein und das sollte es für dich generieren, das sollte dir
das generieren , das
würde es generieren. Aber wenn Sie das Gerät
anschließen möchten, schauen Sie einfach nach, ob Ihre ID die
UML der Anlage unterstützt und Sie es noch haben, Ihre ID die
UML der Anlage unterstützt und Sie es noch haben, können
Sie einfach diesen
Ansatz verwenden Das ist das Erste
, was wir tatsächlich
erforscht haben . Das ist der Plan für UML. Es gibt noch etwas anderes, das wir
im Grunde erforschen, oder? Siehst du, das ist großartig. Wir sehen genau, wie
alles zusammenhängt. Wir sehen, dass das andere Modul
der Hauptleitfaden ist , der alles
auslöst. Siehst du, Email hört sich die Ereignisse von hier aus
an. Von hier
hängen sie ab, wie Emil zuhört. Sie können sehen, dass die Zahlungen von
Ausnahmen abhängig sind. Das Inventar hängt von der Ausnahme ab. Die Aktion des Ereignisses
hängt von der Ausnahme ab. Sie können dort sogar die
anderen Modelle sehen. Das gibt Ihnen also nur einen vollständigen Überblick über Ihre
gesamte Anwendung, was meiner Meinung nach eine sehr gute
schematische Darstellung
der tatsächlichen
Funktionsweise der Anwendung ist der tatsächlichen
Funktionsweise der Anwendung vollständigen Überblick über Ihre
gesamte Anwendung,
was meiner Meinung nach eine sehr gute
schematische Darstellung
der tatsächlichen
Funktionsweise der Anwendung ist. Das ist einfach großartig Das ist einfach großartig. Alles klar. Es gibt noch etwas
anderes, das wir erforschen können. Wir können sagen, dass du auch schreiben kannst. Sie können sehen, dass wir hier nur eine Information
haben. Sie können auch sehen, wie
einzelne Module als
UML geschrieben einzelne Module als
UML werden. Lassen Sie uns das noch einmal ausführen Lass uns das machen.
Lass uns das ausführen. Jeder einzelne von ihnen wird
einzeln
als geplante UML geschrieben Schauen wir uns genau an,
wie das funktioniert. Sie sehen also
, dass alles nacheinander geschrieben wird. Also lass uns einfach
darauf warten. Alles wird nur ein bisschen
reinkommen. Ich warte einfach,
bis alles fertig ist. In Ordnung. Okay. Okay, ich glaube, wir sind fertig. Ich denke, das ist erledigt. Ordnung, lass uns das erkunden.
Fantastisch. Fantastisch. So können Sie bei jedem Modell
alles sehen. Jedes Modell, das
reinkommt. Siehst du? Es hängt davon ab, dass es zeigt, mit wem
es direkt verbunden ist. Sehen wir uns die
Aktion des Ereignisses an. Event-Aktion auch. Sie sehen, dass diese
Veranstaltungspublikation eigenständig ist. Denken Sie daran, dass wir
nichts mit
dieser benutzerdefinierten Eventpublikation gemacht haben, die eigentlich die Tabelle
modelliert hat
, die
automatisch für uns erstellt wurde , Wir haben einen Notendurchschnitt verwendet, aber wir haben
nichts damit gemacht. Ich habe Ihnen nur gezeigt, wie
Sie tatsächlich modellieren eine Entität anhand dieser
Tabelle modellieren und nach Belieben verwenden können also die Ausnahme
, von der andere
abhängig sind Sie sehen also die Ausnahme
, von der andere
abhängig sind, Inventory
ist davon abhängig Das ist gut. Das ist gut. Das ist gut. Wir haben auch
eine andere Option, die wir untersuchen können. Es gibt auch eine andere
Option. Lassen Sie mich das
alles schließen, außer andere
Tabs zu öffnen. Es gibt noch eine andere
, bei der wir auch sagen können: Punktwrite-Moduva
Modo-Leinwände Sie sehen genau, wie
das funktioniert. Lass uns das nochmal machen. Ich werde einfach wieder nach allem
rennen. Das läuft gerade durch
, schauen wir uns einfach einen
Integrationstest an, damit der Kontext
jedes Mal
geladen wird, weshalb es ein bisschen Zeit in
Anspruch nimmt. Warten wir einfach,
bis wir diesen Lauf zulassen, wir werden genau sehen,
wie das auch funktioniert. Also genau, wie das funktioniert. Sobald Sie sich damit befasst haben
, gibt es noch eine weitere
Option , bei der
einige sagen könnten: Ich mag keine Pflanzenmilch Gibt es eine andere
Option? Ja, es gibt noch eine weitere Option, die
wir untersuchen werden Lassen wir das zu Ende gehen. Lassen wir das zu Ende gehen. Lassen wir das zu Ende gehen. Das ist erledigt, lassen Sie uns das
überprüfen. Alles klar. Du kannst sehen, dass
das so nett ist, oder? Informiert Sie über das Basispaket, teilt Ihnen den Event-Listenern mit,
was es abhört und sagt Ihnen, welche Ereignisse sich genau hier
anhören Wenn Sie also
diese Ereignisaktion überprüfen, können
Sie sehen, dass
sie über einen Controller verfügt Wir sehen, dass es einen Dienst
namens „Sie“ gibt, der Event veröffentlicht hat. Es zeigt Ihnen also alle Informationen, direkt darin, das Repository. Schauen wir uns etwas
Interessanteres an. Schauen wir uns das O an,
oder? Lass uns das sehen. Ich verstehe. Das O hat andere
Veranstaltungen, andere Dienste. Sie sehen das Repository, wir haben im Grunde ein, lassen Sie uns sehen, wir haben die
Komponenten, wir haben die Dienste. Wir haben das, den
Inventarservice , den Sie mit der
eigentlichen Veranstaltung verbunden haben. Siehst du, wir haben auch ein
paar andere Sachen. Ein paar andere Sachen von der Polizei,
oder? Also anderes Kochzeug. Lassen Sie uns zum Schluss die
Zahlung überprüfen. Siehst du, das kommt tatsächlich rein. Das ist also wirklich gut.
Das ist wirklich gut, Mann. Das ist gut. Das ist also eine solide Dokumentation,
die Ihnen zur Verfügung gestellt wird, die Sie einfach physisch
kopieren und einfach dort in Ihrer Dokumentation platzieren
können ,
damit sie verwendet werden kann, oder? Okay, also lass uns andere Tabs schließen. Ja, es gibt auch diese
Option, die ich ausprobieren möchte. Ich habe die
Dokumentation im Grunde genommen nur dagegen gelesen. Ich habe etwas Faszinierendes gesehen. Welche Datenoptionen könnten
Sie tatsächlich erkunden Schauen wir uns einfach an, wie
es aussieht. Ich sehe nicht wie, aber ich habe gesehen, dass du so
etwas machen könntest. Warum Sie das ändern wollen, Sie denken darüber nach, diese Standardeinstellung,
wie sie aussieht, zu
etwas zu
ändern , das vielleicht ein
bisschen mehr UML wie Sie es
traditionell gewohnt sind Schauen wir uns an, wie das
funktioniert. Mal sehen, wie das funktioniert. Lassen Sie uns das noch einmal
ausführen. Lass uns sehen, wie das funktioniert. Ich erkunde es
gerade, oder? Ich weiß nicht, ob es
in Verbindung damit funktioniert, ich muss all das entfernen
und dafür sorgen, dass es wieder funktioniert. Aber das ist einfach dein Stil. Die Studie sollte eigentlich
geschrieben werden. Mal sehen, wie es geht. Lass uns sehen, was es macht.
Lass uns sehen, was es macht. Lass uns sehen, was es macht. Das kommt, was kommt. Dieser Typ kommt und
erkundet Sachen. Mal sehen, was
dran ist. In Ordnung, fertig. Lass uns erkunden. Lass uns das sehen. Lass uns das sehen. Lass uns sehen. Hat es etwas geändert? Ich kann keine Veränderung erkennen. Ich sehe wirklich keine
Veränderung, oder? Ich dachte, es wird etwas
zeigen, das uns
die traditionelleren
URL-Diagramme zeigt , oder? Ich hatte gehofft, das zu sehen. Nun, ich glaube, ich sage nicht
, dass das nicht kommen wird. Wahrscheinlich muss ich das nur für ein paar Tabs
offenlegen. Gibt es eine Möglichkeit,
diesen Kerl damit zu verbinden? Ich denke, das ist einfach Standard. Also lass mich all
diese beiden rausnehmen. Also lass uns die alle rausnehmen. Lass uns das dekorieren, oder?
Lass uns sehen, wie es funktioniert. Mal sehen, wie der Typ arbeitet. Ja, lassen Sie uns diese Alpen ausschalten. Nimm all diese beiden Ventile. Ordnung. Lass uns das nochmal machen. Lass uns sehen, was passiert. Das ist nur der letzte
Lauf, sagt einfach, Leute, erkundet
das einfach. In der Dokumentation siehst
du diesen Stil. Es sieht ziemlich fantasievoll aus.
Es sieht cool aus Das ist genau das, was ich gesehen habe. Ich fand, das wäre
nett, genau das, was ich gesehen habe. Traditionelles UO Modi-Diagramm
, das sich davon unterscheidet. Ich habe es
euch mit Pablo gezeigt und ich habe gesehen, dass Koblar das schaffen
kann Das ist der Code, damit das
tatsächlich funktioniert. Aber ich glaube, ich verstehe die
Verbindung nicht richtig. Aber ich denke, ihr könnt es erkunden und genau sehen,
wie es aussieht. Lass uns das sehen, ob
wir etwas bekommen. Mal sehen, ob wir
so etwas
bekommen . Ich glaube, ich
verstehe es nicht. Ich glaube, ich verstehe
das gerade nicht. Okay. Ja. Also im Grunde
ist das ein so grundlegender Teil, das ist, das sind im Grunde
die dokumentarischen Teile Ich bin mir sicher, dass die, die wir
tatsächlich erforscht haben , wirklich,
wirklich cool sind, oder? Es ist wirklich, wirklich
cool. Ich glaube, wir können tatsächlich noch
mehr coole Teile erkunden, oder? Also mehr coole Dinge.
Nächster Stopp, ja. Nächster Halt, ich glaube,
alle werden auf Entdeckungsreise gehen. Beim nächsten Stopp werde ich auf Entdeckungsreise gehen. Jetzt, wo wir das haben, können
Sie
diese Reproduktion einsetzen. Sie können diese Produktion bereitstellen. Das würde tatsächlich kaputt gehen. Um die Abhängigkeiten für
die Produktion bereitzustellen, müssen Sie sie hinzufügen, um die Laufzeitverarbeitung
von Spring Modulate tatsächlich zu unterstützen , denn
so wie es ist, es nur eine Umgebung Das wird
im nächsten Video S zu sehen sein.
38. Modulith-Dokumentation 2: Ordnung, Leute.
Danke, dass du mit mir zurückgekommen bist. Es soll ein
relativ kurzes
Video sein , ein sehr kurzes Video. Ich möchte dir nicht zeigen,
wie das eigentlich zusammenhängt. Ich habe es mir gerade noch einmal angesehen. Ich habe herausgefunden, dass dies einen
Streit mit den Dagam-Optionen erfordert. Sie müssen also nur diesen Kerl
auswählen und ihn einfach in diesen Typen stecken und ihn in diesen Typen stecken und es sollte
in Ordnung Das sollte im Grunde richtig
funktionieren. Für das Individuum für das Individuum und für
das gesamte Modul
schauen wir uns an, welche anderen
Möglichkeiten es gibt. Wenn wir keine UML haben. Lass uns sehen. Wir haben,
glaube ich, nur UML und CFO Ich weiß nicht, was CFO macht. Wir können
B einfach erkunden, um euch nur die
Sammelfaktoren zu zeigen Ich führe
das schnell durch und ihr könnt
herausfinden , wie CFOL aussieht,
wie UML Ihr könnt die Standardeinstellung wählen, die
ihr benutzt. Mal sehen, wie die
Standardeinstellung aussieht. Das geht gerade durch. Ich denke, es ist standardmäßig CFOL, dann wählen wir einfach,
welches nur eines, oder? Ich wollte
euch nur zeigen, wie das zusammenhängt weil ich es mir gerade angesehen
habe Ich habe
die Dokumentation heute im Grunde genommen
noch einmal überprüft , monatliche Dokumentation, um zu sehen,
wie sie aussieht, und ich, um es herauszufinden. Also dachte ich einfach, ich
sollte das eigentlich schnell fallen lassen, aber für manche
wichtig sein. Okay? Also lass es uns überprüfen.
Fantastisch, damit wir sehen können. Das sieht gut aus, oder?
Das sieht sehr gut aus. Das sieht sehr gut aus. Also wollte
ich uns das nur für die einzelnen Serien zeigen. Also ich will uns das nur
zeigen und ich denke ja, danke euch. Dann können wir mit
dem Runtime-Support weitermachen .
Danke. Tschüss.
39. Laufzeitunterstützung und Aktor: Ja, danke, dass ihr
zu mir gekommen seid. Jetzt sprechen wir über
die Runtime-Unterstützung. Denken Sie daran, dass ich erwähnt habe
, dass
dies nicht in Produktion gehen kann , wenn Sie nicht
über die Runtime-Unterstützung verfügen. Die Runtime-Unterstützung ist für Sie
sehr wichtig. Und um Ihnen zu zeigen, wie
wir die Abhängigkeit erhöhen werden, wir gleichzeitig
auch den
Aktuator einführen, werden wir gleichzeitig
auch den
Aktuator einführen, oder? Für diejenigen, die sich mit Actuator
auskennen, hilft
uns
Actuator tatsächlich dabei, Ihnen Metriken zur Verfügung zu stellen, die Sie
hier eintragen können , damit
Sie die Metriken tatsächlich abrufen und hilft
uns
Actuator tatsächlich dabei, Ihnen Metriken zur Verfügung zu stellen,
die Sie
hier eintragen können, damit
Sie die Metriken tatsächlich abrufen und so auf einem Diagramm
veröffentlichen können, oder? Das funktioniert Also im Grunde
zeige ich euch einfach Box. Um das richtig zu demonstrieren, werde
ich Spring Dot
IO starten und Spring Dot IO starten. Wenn ich nun die Abhängigkeit
indirekt über mein
fantastisches Intellig hinzufügen würde, würden
wir vielleicht nicht
alles sehen, was wir hinzufügen müssen Was ich tun würde, damit wir es sehen ,
damit wir nichts
verpassen, werde
ich weitermachen und
Modulf modulFF hinzufügen , nur um zu
sehen, wie es aussieht Fügen wir JPA hinzu,
um alles zu sehen. Fügen wir Lombok hinzu. Richtig. Fügen wir den Aktuator hinzu. Nun, das ist genau das,
was ich meine, Aktuator. Dann auch, ich glaube,
wir haben alles. Was wir dann tun werden, ist, wir werden dann diesen Meister erkunden. Wenn Sie das
genauer untersuchen, würden
Sie feststellen, dass
wir einen Aktuator haben Jetzt sieh dir das an.
Wir haben einen Aktuator und wir haben auch einen
modulierten Aktuator Dann haben wir Observability für diejenigen, die Observability nutzen
wollen, Dinge wie wenn Sie Mikrometer verwenden
wollen,
Sie wollen Mikrometer verwenden, und Sie wollen eine
spezielle Implementierung
für Observability verwenden für diejenigen, die Observability nutzen
wollen,
Dinge wie wenn Sie Mikrometer verwenden
wollen,
Sie wollen Mikrometer verwenden,
und Sie wollen eine
spezielle Implementierung
für Observability verwenden, richtig? Ja, im Grunde hat das eine andere Spezifikation. Bei My Commuter können
Sie dann je nach
Umgebung, an der Sie gerade arbeiten,
entscheiden, ob Sie Datadog, Dino Trace, Prometheus und offene Telemetrie hinzufügen könnten Dino Trace, Prometheus Sie könnten also einen Stack-Treiber hinzufügen. Es gibt also mehrere, die Sie zur besseren Übersicht hinzufügen
könnten. In diesem Kurs befassen Sie sich nicht mit
Beobachtbarkeit. Dieser Kurs dient im Grunde
nur dazu, Ihnen genau zu zeigen
, wie Sie die
Aktuator- und Laufzeitunterstützung hinzufügen Also werde ich schnell
noch ein bisschen zeigen , damit wir
sehen können, wie das funktioniert. Also die Runtime-Unterstützung, das ist genau das, was
Sie hinzugefügt haben. Richtig? Das ist die
Runtime-Unterstützung, wenn Sie zur Spring
Moduli-Dokumentation
gehen. Es wird erwartet, dass
Sie diesen Typen
hinzufügen, der das ist, oder? Also werden wir das einfach kopieren. Ich werde diesen Typen schließen zu unserem Projekt zurückkehren.
Geh zurück zu einem Projekt. Ich gehe kurz vor
dem Test runter und füge das hinzu. Dann würde
ich dann zusätzlich zum Aktuator gehen, den Aktuator auswählen oder den Aktuator auswählen Ich versuche euch nur zu
zeigen, wie ihr es machen
würdet, wenn ihr Intellig
nicht benutzen In beide Richtungen funktioniert es. Dann füge den Aktuator hinzu,
dann gehe ich zurück. Ich gehe zurück. Dann geh runter, ich brauche auch das
ctRedf-Modul dazu,
ich werde Observability nicht Sobald du Observability
hinzufügst,
hast du wahrscheinlich, weil es wahrscheinlich Zipkin Zipkin erwartet, es
könnte
in Zipkin konfiguriert worden sein in Zipkin konfiguriert worden Mcmmeter, ich kann Ihnen versichern, dass
sieben davon automatisch konfiguriert wurden, und Sie sieben davon automatisch konfiguriert wurden Ich habe das getestet
und festgestellt wenn Sie diese
Dinge nicht in Ihrem Unterricht haben, Probleme bekommen,
weshalb ich den Teil der Beobachtbarkeit nicht hinzufügen werde Ich werde nur die
wichtigen Dinge hinzufügen, die wir benötigen.
Nachdem wir das hinzugefügt haben, lassen Sie uns das ausführen Lassen Sie uns das auf die Probe stellen. Ich wollte auch erwähnen , dass ich die letzte
Dokumentation, die wir hinzugefügt haben, dem GitarRepository
unter Dokumentation,
Moduldokumentation zugewiesen
habe , sodass Sie sie
dort finden können, um genau zu sehen, welche
Änderungen Jetzt, wo das verkabelt ist. Die nächste Frage ist dann,
wie verkabeln wir das? Das ist, wie wir
wissen, genau dieselbe
Implementierung, bei der wir wissen
, wo
Sie den Aktuator verwenden. Ich gehe einfach hier rein. Jetzt haben
wir die Zeitunterstützung, also sollten die Dinge so funktionieren, wie sie sind. Ich füge einfach das Management hinzu. Management, dann möchte ich Management
einbeziehen. Dann füge ich Endpunkte hinzu. Ich möchte einen Endpunkt hinzufügen. Dann will ich die Aufmerksamkeit,
aber ich schließe das nicht aus, ich möchte einbeziehen,
was ich zeigen möchte. Einschließen einschließen. Dann zeig einfach die Gesundheit.
Lass uns die Gesundheit zeigen. wir Modulf
Show Modulif, weil
das das Schlüsselwort ist, das
wir brauchen. Modulf Lass uns das zeigen. In Ordnung Fangen wir mit der
Anwendung an und wir zum
Endpunkt, um das zu sehen? Lass uns das machen. Während
das noch bevorsteht, schauen
wir dann genau,
wie es ausgeht. Sobald das der Fall ist, würden
wir versuchen, alle Aktuatoren, die
uns zur Verfügung stehen,
sofort verfügbar zu
sehen uns zur Verfügung stehen,
sofort verfügbar zu Lassen Sie mich das einfach zur Verfügung stellen sobald das erledigt ist, ist es erledigt Lass uns sehen, dass es fertig ist. Das ist erledigt. Das ist
erledigt. Lass uns hier reingehen. Gehen wir in Loco
Host 8 Actuator rein. Ordnung. Damit du es modellieren kannst. Modul es ist verfügbar. Sobald Sie also auf
Modellieren klicken, bumm. Also sehen wir alles, was uns
zur Verfügung steht. Es zeigt uns also das
Ausnahmemodell, das Event-Action-Modell. Wir sehen das Erfindungsmodell. Sie sehen das andere Modell. Sie sehen dieses Modell. Ich glaube, ihr seid da, wo ihr euch
das selbst ansehen könnt, oder? Aber eins sage ich. Abgesehen davon, die Dinge
als bereits ein Ereignis anzusehen, warum stehen Sie nicht auf
der Schulter der Giganten? Es gibt also etwas,
das man den Health Customizer
oder den Actuator Customizer nennt , im Grunde den
Customizer, den Sie können einen
benutzerdefinierten Endpunkt erstellen, Sie
dem Aktuator hinzufügen können, aber das würde den
Rahmen dieses Kurses Wie Sie den
Umfang dieses Kurses nennen möchten. Im Grunde kann man
Frühlingsstiefel in der Praxis lesen, Frühlingsstiefel in der Praxis. Wenn ich mich jetzt an
den Autor erinnern würde, glaube
ich, dass Spring Boots
in Practice von So
Nat Msib SNT Msib ist . Sie finden es auf Sie
finden
es auf kann ich mich Manning.com. Es zeigt Ihnen, wie Sie einen benutzerdefinierten
Trator
erstellen . Sie können dieses Spleißen
erstellen Nun, komm schon. Warum würdest
du das bauen wollen? Warum
legst du dir das nicht einfach selbst ein? Warum fügst du nicht einfach
den modulierten Akteur ein und stellst sofort alles bereit , was du
brauchst Das funktioniert einfach sofort nach
dem Auspacken. Ordnung. Ich wollte euch
zeigen, wie das geht. Lass uns wahrscheinlich einfach versuchen
, alles aufzudecken. Auch wenn du gesagt hast, das
nicht zu tun. das nicht immer.
Versuchen wir, alles aufzudecken. Lass uns sehen, wie das funktioniert, oder? Entschuldigung, ich glaube, da
ich Yarmo verwende, bräuchte ich
hier einen Code Wenn ich falsch liege,
brauche ich hier einen Code. Ich denke, deshalb funktioniert es. Ich denke, ab jetzt
brauchst du immer einen Code, den du benutzt Yamo Aber wenn du die
Anwendung von Eigenschaften verwendest, brauchst
du nicht, dass dieser Code nicht funktioniert, aber das wird von Yam nicht
erkannt, also musst du
es in den Codes platzieren Ordnung, wenn das erledigt ist, drücken
wir einfach auf den Aktuator Lass uns sehen. In Ordnung. Wir werden sehen, dass alles verfügbar ist,
alles, was verfügbar ist. So platziert man es im Grunde. Jetzt ist es für die Bereitstellung
in der Produktion verfügbar, es
ist für die
Bereitstellung in der Produktion verfügbar. Jemand könnte mich fragen, was meinst du damit, dass es uns jetzt
gut geht. Oh ja, das ist genau die Anwendung, die
Sie erstellen möchten. Alles bleibt beim
Alten. Ihr Eigentum, Sie möchten wahrscheinlich Dinge
verschieben. Erinnerst du dich, dass ich etwas
Wichtiges erwähnt habe, nämlich die Compose-Datei, wir sollten die
Compose-Datei verschieben, oder? Sollte
die Compose-Datei entfernen , wenn wir promovieren wollen. Wir sind bereit zu promovieren,
wenn wir das einfügen. Ich denke, das nächste
Ding wird die Erkundung sein. Wir
wollen anfangen, uns, sagen wir, dieser
Anwendung zu befassen, oder? Lassen Sie uns das fortsetzen. Spring Boots hat diese
großartige Integration mit Kontinualisierung Das würden wir
also im nächsten Video untersuchen. Ordnung.
Danke Leute. Ich glaube, wir konnten das erreichen, was
wir hier erreichen wollten. Danke, dass du dir das nächste Video angesehen hast.
40. Docker: Ordnung, Leute, ihr nähert euch physisch schnell dem
Ende der Küste Ordnung. Ich möchte
über Dokumentation sprechen. Entschuldigung, ich werde über
Fortführung sprechen, wollte ich sagen. Ich werde über Kontinuisierung sprechen. Offenbar wissen wir, dass die meisten Anwendungen,
die
in dieser Zeit entwickelt wurden Container umgewandelt werden müssen, um sie
dann auf einem Cluster, Uberttis oder Deco Swam bereitzustellen, oder auch wenn es nur ein Jar ist, es in Open Red Heart lädt Es gibt
heute mehrere Optionen, mit denen Sie Ihre Anwendung bereitstellen
könnten Aber in dieser speziellen
Videobranche
müssen Sie Ihr Image weiter dekorieren. Erste Option werde
ich euch zeigen,
und ich werde euch die
Vor- und Nachteile einiger davon zeigen Ich beschäftige mich ständig damit, nur um es Ihnen zu zeigen. Das Erste, was ich zeigen
möchte, ist Sie nichts tun müssen. Sie müssen hier keinerlei
Abhängigkeit hinzufügen. Spring Boots ist
vollständig integriert. Es ist vollständig in Docker integriert
. Bisher läuft in dieser Umgebung
eine
Docker-Laufzeit in dieser Umgebung
eine
Docker-Laufzeit Sie könnten diesen Befehl im Grunde
einfach ausführen Führen Sie einfach diesen Befehl aus.
Lass mich das nach oben verschieben. Lass uns den Bildschirm leeren. Lass uns diesen
Bildschirm holen. Du rennst einfach weg. Ich sage es, weil ich
erwarte, dass es jeder sieht, aber nehmen wir einfach an, nehmen wir
an, dass es jeder sieht, aber lassen Sie mich einfach Maven, Spring
sagen, wenn Sie es
von der Konsole aus ausführen,
stellen Sie sicher, dass Ihre Version von Java dieselbe Version ist, die in der Umgebung
läuft Wenn ich also die Vn-Version mache, sollten Sie meiner Meinung nach mindestens Version
drei Punkt acht
haben ,
wenn ich mich nicht irre, 38, meine ist 39 oder sechs und ich verwende Java Version 21. Wenn du dir nicht sicher bist,
ich kann auch
VN machen , ich kann die Java-Version mit
Bindestrich machen, oder? Java-Version mit Bindestrich, richtig? Sie können sehen, dass ich Java 21 verwende, was genau
dem entspricht auf dem
ich diese Anwendung ausführe Also was ich kann, dann
kannst du einfach Maven,
Spring Hyphen Boots und
dann Buuimage ausführen Spring Hyphen Boots und
dann Das ist alles was du tun musst.
Vielleicht EnVN Space, Spring Hyphen Boots,
Column, Dued Führen Sie das einfach aus und das
ist alles was Sie tun müssen. Das ist im Grunde
alles, was Sie tun müssen, und es wird automatisch alles für
Sie dockerisieren Führen Sie alle Tests aus und denken Sie daran, dass
Sie Ihren Test überspringen können. Den Test zu überspringen ist also sehr einfach. Alles was Sie tun müssen, ist
Dashi D und dann den Test überspringen. Ich schreibe einfach einen Befehl, wenn
alles aufgebraucht ist. Es ist nur so,
dass bei so etwas nVN ein Frühlings-Bindestrich läuft Dann Bindestrich-Boots, dann
Bud, Bindestrich-Image, dann D, D, Tests
überspringen sollte
den Test überspringen und es sollte das Bild für
dich sein Sie können sehen, dass das eine Verbindung hergestellt hat
und es ist wunderschön, das Bild. Das Bild zeigt Spring
Moderate Court, 001 Snapshot. Jemand könnte mich fragen: Was ist,
wenn ich diese 001 nicht will? Sehr einfach. Du kannst zu
deinem Magier gehen. Dann gehst du in diesem Kurs zu
MVN Mv. Ich werde mich nur auf Maving allein konzentrieren. Im Abschnitt Aber gibt es so etwas wie den endgültigen Namen Sie können hier Ihren
endgültigen Namen erstellen, und dieser wird ihn tatsächlich haben. Was du auch machen kannst,
wenn du all diese Typen siehst, siehst
du, wie der Name ist? Du siehst den Namen. Sie sehen die
Version, Sie können sie beurteilen. Artefakt-ID,
Sie können es beurteilen. Du kannst das im Grunde tun, wenn du
willst, du kannst das tun. Kann Artefakt-ID machen. Artefakt-ID, da vielleicht ein Bindestrich. Dann können Sie die Version
einfügen, wenn Sie möchten. Version, richtig? Und du kannst hier noch ein paar andere coole Sachen reinlegen ,
wenn du willst, oder? Und das, um
die Artefakt-ID auszuwählen. Sie wählen diese Artefakt-ID. Du wählst deine Version, diese Version, die du eingegeben
hast, ich muss sie ausführen, richtig? Oder wenn Sie einen benutzerdefinierten Namen haben möchten
, können Sie es einfach hier tun,
und das sollte funktionieren. Also für diejenigen,
die mit diesem Namen nicht einverstanden sind, versuche ich
das zu
zeigen, wenn Sie mit
diesem Namen nicht einverstanden sind, verwenden Sie ihn einfach. Benutze das einfach und passe
es an, wie du willst. Sie möchten es für
diejenigen anzeigen, die möchten, dass der Name geändert wird. Das ist es also, oder? Das ist also die erste Option. Wir sehen also, dass es
immer noch gebaut wird. Lassen wir
es einfach bauen. Dann konzentrieren wir uns auf die zweite Option. die zweite Option (
zweite Option) müssen Sie eine Datei
namens Dockerfile erstellen Docker-Datei. Sie schneiden also die Docker-Datei im
Stammverzeichnis des Projekts aus Sobald Sie die Docker-Datei
im Stammverzeichnis des Projekts ausgeschnitten haben, beginnen
Sie mit dem Schreiben
Ihrer Befehle Ich werde mir keine Zeit nehmen, Befehle
zu schreiben. Ich schreibe es gerade aus, also bringe ich
es einfach hierher, richtig? Also nur um die Dinge
so einfach wie möglich zu machen. Also bringe ich
es einfach her, oder? Also das ist ein grundlegender
Befehl, oder? Ich werde einfach hier sein und
das einfach rausnehmen. Also lass uns einfach, äh, in Ordnung sein. Also sollten Sie als Referenz da sein
. Ich werde es nicht
herausnehmen. Also das bin ich. Das ist meine E-Mail, richtig? Das ist meine E-Mail,
Sie könnten mir wahrscheinlich eine E-Mail
schicken
, wenn Sie möchten. Schicken Sie mir eine E-Mail, um ein paar coole Sachen
anzufordern. Das ist cool. Das alles
ist alles, was du tun musst. Alles was wir tun müssen, ist
Amazon Coreto, Amazon zu benutzen. Amazon Coreto. Ich bin ein großer Fan
von Amazon Coreto, oder? Amazon Koreto macht es dann 21. Amazon Care bis 21. Also ja, funktioniert physisch. Ja. Ich hoffe, ich habe
Amazon Coreto richtig geschrieben Sieht aus wie, okay,
ja, richtig. Also, springen Sie in Amazon Coreto
und das ist alles, was Sie tun müssen. Zunächst sehen Sie, wie
die Images erstellt wurden. Ich bin ein großer Fan der
Befehlszeile, aber ich kann diesen Typen auch aufpeitschen Das ist der Docker-Inhalt, der zu
den Bildern gehört. Also lass uns den Frühling eintippen. Lassen Sie uns das auffrischen, weil wir einfach den Frühling hereinbringen
könnten. Siehst du? Das ist es.
Das ist das Bild. Wir haben unser Bild, aber, nicht wahr? Fantastisch. Cooles Zeug,
cooles Zeug, Cooles Zeug. Cooles Zeug.
Was möchte ich als Nächstes tun? Ich habe das ausgezogen,
ich habe es gelöscht. Lass uns reingehen und das dann ausführen. Lass uns diese Datei ausführen. Ich gebe nur
Protein. Lass uns das einfach ausführen. Damit das läuft, müssen
Sie Ihr Image haben. Sie müssen mindestens Ihre
Ja-Datei haben, aber die Ja-Datei. Wie führt man die
Ja-Datei aus? Sehr einfach. Lass den Jahi laufen, mach einfach VN. Lass mich das klären. Diese sind Teil des DevOps-Prozesses, oder? Sie müssen das alles nicht
wissen. Aber wenn
Sie interessiert sind, einfach BN Clean Package
oder überspringen Sie einfach den Test. Paket, dann der Skip-Test. Das ist alles, was Sie
tun müssen, wenn Sie das ausführen Es sollte
diese Datei für Sie erstellen. T sollte diese
Ja-Datei erstellen, diese Ja-Datei erstellen. Lassen Sie uns nun zuerst erklären, was ich hier mache,
warum das läuft. Ich sage nur, hey, benutze Amazon korrekt als mein Basis-Image. Dann
ist der Maintainer nur ein Name nur ein Label,
tut nichts Ich sage, ich will eine Gumencoda-Datei. Ich glaube, ich möchte das ein
bisschen modifizieren. Ich modifiziere das ein bisschen. Lass uns etwas
Textuelles machen. Lass uns etwas Textra machen. Was ich tun möchte, ist alles aus einem Pfad von einem Pfad
zu diesem zu kopieren ,
anstatt das direkt zu verwenden Ich möchte
alles von einem Pfad
zu Rotz kopieren , nein, sehen wir nein, mal
sehen, nein Ich möchte alles kopieren. Das funktioniert, wenn ich eine Abhängigkeit
habe, aber ich möchte diese nicht verwenden,
ich möchte etwas extra. Lass mich dieses
Video einfach pausieren, also schnell zurücklaufen. Weil ich
diesen wichtigen Schritt nicht verpassen möchte. Ich muss nur eine
Kopie meiner Zieldatei einfügen. Ich muss diese Datei
in den Container kopieren, dann weise ich sie einfach hier zu. Nur eine Minute. In Ordnung, Leute. Vielen Dank. Ich
konnte das ändern. Ich wollte mir nur etwas
besorgen, um den wichtigen
Teil, den ich dir zeigen möchte, nicht zu verpassen. Um zurück zu gehen, habe ich
gerade hinzugefügt, dass Sie den
Topf, den Sie verwenden möchten, offen legen. Dann, wie Sie sehen können, bringe ich tatsächlich
ein Argument vor. Dieses Argument sollte sich auf
alles konzentrieren , was mit einem
Punktglas im Zielordner endet, was genau dem entspricht. Das endet mit dem Punktglas.
Das ist nicht das Punktglas. Damit ist das Punktglas beendet, dann kopiere ich, was in diesem Teil
ist, das ist das Ziel, der Javier Ich kopiere es dann und wir
nennen es Updo Jar. Sobald ich das nette Q
zum Einstiegspunkt als Java habe, bedeutet
das, dass alles eine gerade Linie
ist Ich breche
es nur aus Gründen der Lesbarkeit. Dann können Sie die Zeitzone einstellen. Also egal, in welchem Land
Sie sich befinden und in
welchen Staaten, genau das
mache ich hier. Ich bin in Afrika und nehme von
Legs auf. Und das JAR, wenn
Sie es in Java ausführen wollen, machen
Sie im Grunde Java
Hyphen Java Hyphen Jar,
dann den Namen
Ihrer Anwendung, sagen
wir abc dot jar dann den Namen
Ihrer Anwendung, sagen
wir abc dot Das ist im Grunde das, was
Sie tun. Aber im Moment sind
dies die zusätzlichen Argumente, die
Sie tatsächlich hinzufügen. Ich überspringe diese Gründe. In diesem Teil
fügen Sie das Federprofil aktiv hinzu. In diesem Teil ist das
Federprofil aktiv. Dann können Sie
vielleicht ein Federprofil einstellen. Richtig? Sobald Sie Ihr
Profil eingerichtet haben, wird das Profil,
was auch immer Sie
diesem zugewiesen für Ihren Gebrauch in dieses Bild eingebunden. Du kannst erkunden. Ich möchte euch nur zeigen
, dass es auch möglich ist. Also wie mache ich das? Ich
führe diesen Befehl im Grunde einfach aus. Ich führe gerade diesen Befehl aus. Ich werde erklären, was
dieser Befehl bewirkt. Dieser Befehl bedeutet im Grunde. Es bedeutet, dass du Docker, du baust Dash T bedeutet, dass du ihm ein Tag geben willst Wenn Sie ihm kein Tag geben, wählt
es einfach einen zufälligen Namen. Sie würden den Namen sehen, den es tatsächlich verwenden
wird, oder? Sie wählen also ein Schlagwort aus, und
wenn ich das Tag ausgewählt habe, geben Sie ihm einen Namen Modul
es ein Punkt Null, dann bedeutet Punkte, dass Sie
im aktuellen Arbeitstagebuch lernen Was ist das aktuelle
Wing-Tagebuch? Du tust , was zeigt, dass ich mich gerade im
Stammordner dieses Typen befinde Dort kann ich meine Docker-Datei
sehen,
richtig, meine Docker-Datei Also gehe ich einfach rüber
und starte das einfach, oder? Und wie Sie sehen können, habe ich diesen Befehl schon einmal
ausgeführt, also wird er ziemlich schnell sein, weil
Sie ihn ausführen sollten, bevor zuerst den Amazon
Coreto
herunterladen, den ich Ihnen wirklich zeige. Das ist also die zweite
Option, oder? Das ist die zweite Option, Leute. Also lass mich einfach weitermachen
, um diesen Kerl zu löschen. Okay, also ich habe das
aus meiner Docker-Registrierung gelöscht. Lassen Sie uns das also kommentieren
, oder? Also die letzte Option, die
ich euch zeigen möchte ist diese, damit ihr die
drei Optionen abhängig von euch ausführen könnt. Nun, ich habe das eingeführt, für
den Fall, dass Sie
Ihre Zeitzone hinzufügen möchten , weil die meisten Leute
Probleme mit der Zeitzone haben. Sobald Sie die
Zeitzone hinzugefügt haben, werden die lokale Datetime, die Sie für die
Ausführung der lokalen Tageszeit verwenden, die Daten und das Datum,
ab dem Sie
Ihre Java-Anwendung
verwenden, dem entsprechen,
oder? Ihre Java-Anwendung
verwenden, dem entsprechen,
oder Datetime, die Sie für die
Ausführung der lokalen Tageszeit verwenden,
die Daten und das Datum,
ab dem Sie
Ihre Java-Anwendung
verwenden, dem entsprechen,
oder? Wir werden das bestätigen. Ich wollte es euch nur zeigen. Dann gibt es endlich etwas, das Ebenen-Tools
nennt, oder? Ebenenwerkzeuge, bei denen Sie den Geschmack
aufschlüsseln, dann Ihr fettes Glas,
innerhalb Ihres fetten
Charms, Sie zerbrechen diese, graben
Sie tief und verwenden tatsächlich den Launcher. Diese Änderung im dritten Frühling, ich glaube, im zweiten Frühjahr
gab es diesen Launch nicht. Es ist also nur ein
Framework, das den
Loader bootet, den Ja-Launcher. Aber dieses Mal Spring Three das tatsächlich
eingeführt. Ich hoffe, ich habe Recht, habe das hinzugefügt. Das ist also Scala, das
du ausführen musst. Das ist tatsächlich aufgeführt, sodass Sie es
einfach direkt verwenden können Das Gleiche, Sie
wählen den Amazon Coreto aus, Sie legen ihn tatsächlich als Build Dann W-Verzeichnis, W-Verzeichnis,
ich wechsle gerade das W-Verzeichnis Work Dictry heißt, wenn es
nicht existiert, wird es wechseln. Nun, warum ist das wichtig? Äh, da ist diese Schule, die sagt,
dass es nicht okay ist zu laufen, weil du gesagt hast Linux-Container sei
ein Linux-Container, Image sei ein Linux-Container. Die Schule dieser Tests ist nicht in Ordnung,
Ihre Anwendung im
Stammverzeichnis
eines Linux-Containers laufen Stammverzeichnis
eines Linux-Containers Ändern Sie also das Arbeitsverzeichnis. Wenn Sie das Arbeitsverzeichnis verwenden,
wenn dieser Teil nicht existiert, um ihn
automatisch für Sie zu erstellen. Also diese Option. Dann haben wir diesen
Befehl schon einmal gesehen. Ich zeige dir einen, ich zeige
diesen Befehl auch. Dann führst du die zweite Ebene aus. Diese zweite Ebene extrahiert gibt dir all das,
du bekommst all das. Äh, ich hätte dir gezeigt, dass
dieses Video ziemlich lang ist. Ich hätte es dir gezeigt, wenn
du die Faktu geöffnet
hast, du hast all diese Dateien, du siehst all diese Dateien
darin, richtig? All das existiert tatsächlich
in Ihrem Faktu, oder? Dann kopierst du dann aus dem Build. Das ist nur so, dass es die Dinge auf
einer gnualeren Ebene
laufen lässt,
anstatt nur die Fakten
laufen Ich bevorzuge das irgendwie. Am
Ende hole ich das einfach ab. Dieser Befehl ist auch
wichtig für den Fall,
dass ich meine Zeitzone einstellen
möchte, also führe ich das einfach aus, ich
kann das auch ausführen. Intelligent gibt mir die Angewohnheit
, das direkt auszuführen Ich starte einfach von
der Befehlszeile aus ,
falls Sie es bereitstellen, ich führe einfach denselben
Befehl aus, ich drücke ihn einfach. Lass uns sehen. Das Gleiche, es zerlegt alles und kann
es dann tatsächlich
bekommen, oder? Das ist es im Grunde.
Das ist es im Grunde. Ich wollte es
euch nur zeigen. Eigentlich sind drei Typen drei Möglichkeiten, dein Image
aufzubauen. Dies sind drei coole Möglichkeiten
, Ihr Image zu erstellen. Welchen Weg Sie
auch wählen, verwenden Sie N. So erstellen
Sie Ihr Image Dann können Sie es ausführen. rennen
wir? Ich kann es mir einfach aussuchen. Also habe ich mein Profil nicht festgelegt. Also ich
kann einfach sagen, Duka, lauf. Das sollte B sein, dann glaube
ich, wenn ich
richtig liege, 880, 80 80. Dann geben wir ihm einen Namen. Geben wir ihm einen Namen. Ich sage einfach, das sollte eine Kolumne sein. Entschuldigung, lassen Sie mich
das einfach wiederholen. Lass mich das klären. Claire. Clare das einfach Also nur so, dann 80. Denk dran, dass ich das eingestellt habe. Das könnte ein Problem sein. Sets, die ich
nicht eingestellt habe. Ich denke,
es sollte in Ordnung sein. Es sollte in Ordnung sein.
Ich dachte, ich benutze dieses Set
mit Federprofil. Ich habe das Federprofil nicht festgelegt. Wenn das so ist, dann lass uns einen Namen haben. Nennen wir es N, dann nenne ich es einfach
modulf Modulate Ich sollte es als Modult als Daca-Container ausführen Dann denk dran, dass ich das
schon ausgeführt habe, also kann ich wählen. Gehen wir zum Bild.
Wo ist das Bild? Lass uns nach Modulth suchen. Das ist Modulif unbenutzt. Dann sag einfach modulif und das ist ein Desde, weil das die Version ist
, die wir verwenden Das ist das Ziel.
Ändern wir den Namen in
etwas Besseres Nennen wir es MOD
MOD. Lass uns das ausführen. Ich denke, es unterstützt jetzt den
Dash Dash Name? Name des Dash-Dash-Namens. Ich denke, dieser ist erforderlich. Ja. Sie können Pix Default sehen, das läuft, es läuft nur Anwendung. Was
war der Fehler hier Ja, ich bin mir sicher, dass ihr
wisst , warum das
tatsächlich passiert ist. Ja? Der Grund,
warum es passiert ist , ist, dass ich nicht umgezogen bin. Ich benutze immer noch mein D, dieser Typ für Kinder, richtig? Dafür müssen wir also
alles hier reinbringen, oder? muss ich es in Damit du weglaufen kannst, muss ich es in
den Kerl einbauen. Also sollten wir das wahrscheinlich
einfach schnell machen. Diesmal
verwende ich keine Docker-Unterstützung mehr. Sie müssen also den Docker-Support
abschalten , den Sie in die Produktion
überführen Also zeige ich
euch nur, wie das
geht , damit ihr keine Herausforderung
habt Ihr müsst das auskommentieren, das entfernen. Es tut uns leid.
Was mache ich? Das sollte zur
falschen Zeit die Tür sein. War es schon wieder? Auto zur falschen Zeit fahren. Finde ich es schwierig für
Kinder. Meine Abhängigkeiten. Das ist es. Ich kann das einfach entfernen und
dann aktualisieren. Dann kopiere ich einfach, was wir in den Testordner
verwenden. Ich passt einfach
genau zu dir. Ich hole den Kerl einfach
ab. Dann lass uns reinkommen und Kerl
einfach rauswerfen Dann tu das, dann werde
ich einfach kommentieren. Ich fange einfach mit diesem Typen an. Also merke dir den
Nutzernamen, merke dir das Passwort. Die
besseren Möglichkeiten, dies zu tun. Ich will das eigentlich nicht. Was Sie tun können,
ist,
eine andere Umgebung zu erstellen und
diese Anwendung als Bindestrich Docker zu bezeichnen diese Anwendung als Bindestrich Docker Verwenden Sie dann Eronment-Variablen. Dann können Sie auf die
Eronment-Variablen klicken und sie ausführen Aber es ist ziemlich viel Arbeit. Ich möchte nicht, dass es so aussieht, als hätten wir einen bestimmten Weg. Abhängig von der bereitzustellenden
Umgebung können
Sie also jeden auswählen, oder? Also ich denke,
wir haben dort
Modulif verwendet , wenn dieser Teil auch Modulf
war , oder?
Ja. In Ordnung. Also starte einfach die Anwendung
als Starter und ich zeige nur , dass sie immer noch
wie gewohnt funktionieren. Du führst das aus. Nur um sicherzugehen, die sind immer noch in Ordnung.
Okay, alles ist miteinander verbunden. Also das funktioniert immer noch.
Das funktioniert immer noch. Das war der Teil, den ich erwähnt habe, wenn du zur Produktion gehen willst, musst
du einziehen. Jetzt, wo wir uns
auf die
Produktion vorbereiten , oder sollte ich
sagen, die Produktion anbieten? Ich zeige euch,
wie das geht. Dann muss ich
noch einmal die Maven Clears laufen lassen. Das ist das Maven-Clean-Paket, die Skip-Tests, weil ich
nicht möchte, dass der Test ausgeführt wird Während das läuft, sofort, ich mache es einfach so Lassen wir das einfach schnell seine Arbeit beenden. Ordnung, das ist also
erledigt. Ich stelle das zusammen Dann lassen Sie uns schnell
ein Docker-Image-RM machen. Ich möchte löschen,
was wir vorher haben. Modul Modul. Modul es, dann eins das da.
Kann nicht gelöscht werden. Okay. Ich glaube, es läuft
schon, oder? Es läuft schon.
Also lass uns hier reingehen. Gehen wir zum Container. Der Container ist schon da, also löschen
wir einfach diesen Typen. Kugeln löschen. Was ist passiert? Was
mache ich hier? Hör auf damit. Hört auf damit. Holen Sie sich meine Löschungen.
Sehen wir uns meinen Behälter Lassen Sie uns zu meinen Diensten gehen. Dann löschen wir diesen Stopp und
beenden diesen Docker-Container. Ich möchte nicht, dass dieser Du-Container
mehr läuft, oder? Ich möchte das Gebäude löschen. Was übersehe ich
hier? Mal sehen, was mir fehlt. Lass uns sehen. Erstellt. Lassen Sie uns
den Befehl erneut ausführen. Fehlt mir etwas? Tut mir leid,
der Typ muss rennen. Ich brauche den Docker, um es zu komponieren. Der Typ sollte
rennen. Lass uns das vernichten. Dieser ist wieder. Sie rennen
immer noch oder sehen es. Ich möchte sichergehen,
dass alles noch wie gewohnt funktioniert. Lass es mich runter machen. Ich
versuche alles aufzuräumen. Ich erzähle es jetzt. Okay,
lass uns jetzt sehen. Tristan. Das will ich jetzt
klären. Das habe ich getan. In Ordnung, das ist also weg. Also das ist
jetzt weg. Kann ich löschen? Ich verstehe. Okay.
Habe ich? Lass mich sehen. Ich glaube, ich habe Up-Projecton. Ich hoffe, ich tue es nicht. Lass mich sehen. Ich hoffe, ich habe keine
Endprojektion. Lass mich einfach nachschauen, weil
wir Projecton haben. Das wäre im Grunde
widersprüchlich. Oh, wow Ich glaube, dieses Video wird
wirklich sehr lang. Lassen Sie mich versuchen, die Dinge einfach
schnell zu erledigen. Okay, das hat also geschaffen. Lass uns versuchen zu löschen
, falls wir welche haben. Okay, großartig. Ich
konnte löschen. Ich habe das Image erstellt,
also lass uns einfach schnell laufen. Ich denke, ich muss es als Gast machen, einfach
schnell diesen Bud laufen lassen. Denken Sie daran, ich habe jetzt
alles in der Yamu platziert ,
damit das funktioniert Das ist in der Ablationstiefe. Dann lass uns das einfach aufschreiben. Ich glaube, ich habe das Kommando
über. Ich will es nur ausführen. Okay. Sie sehen also, dass es
eine Verbindung hergestellt hat oder versucht, eine Verbindung zu JDBC Lassen Sie uns sehen. Zeig Es ist eine Frage,
um zu sehen, warum es so ist. Das ist das wärmende Erlebnis
für Passwörter, oder? Auf welche Typen habe ich mein Passwort gesetzt? Habe ich
das richtige Passwort? Lass mich das einfach überprüfen. Was habe ich benutzt oder
was habe ich benutzt? Ich habe also eine
Umgebungsvariable. Also ihr könnt dieses Video vielleicht einfach
überspringen, ich will es euch nur für
diejenigen zeigen , die
wirklich interessiert sein könnten, ich weiß nicht genau,
wie ich das angehen soll. Das ist es, was ich eigentlich
durchgehen werde, um es zu erklären ,
damit jeder eine
gute Vorstellung davon hat, wie das funktioniert. Okay. Also Mod Life Modula Dann ist es das. Modulus Modul Mama Doktor, mal sehen, es sammelt nicht,
worüber beschwert es sich? In Ordnung. Lass uns nachschauen. Lass uns nachschauen. Ich bin sicher, das
gibt uns einen Einblick ob etwas
versucht, eine Verbindung herzustellen. Ja, das versucht eine
Verbindung herzustellen. Lass uns das noch einmal ausführen. Warum leitest du nicht Mr.? Mal sehen, warum der
Herr nicht rennt. Das ist ein Container,
ein Docker-Container, RM, ich wähle diese ID,
BE BE, dann erzwinge ich das Schließen RM der Koch. Das schließt. Lass uns versuchen, es noch einmal auszuführen. Lassen Sie es uns jetzt einfach noch einmal ausführen. Es stellt keine Verbindung zur Datenbank her, kann
es eine
Reihe von Gründen geben. Ich will
euch nur zeigen, wie es funktioniert. Das funktioniert physisch. Um nun tatsächlich eine Verbindung
zur Datenbank herzustellen, gibt es eine Reihe von
Dingen, die Sie tun können. Jetzt setzt der Service ein. Ich sollte versuchen, eine Verbindung herzustellen versuche, mich mit diesem Typen zu verbinden
, der ein lokaler Host ist. Es versucht, eine Verbindung
zum lokalen Host herzustellen. Lokaler Beitrag ist verfügbar. Wenn Sie überprüfen, ob Sie ein
Netz starten, starten Sie ein Netz, wenn
Sie
AO ausführen , geben Sie find
STR direkt neben 5432 Siehst du also? Punkt. Dieser Ort funktioniert
tatsächlich. Ich möchte
euch zeigen, wie es funktioniert. Wir können hier nicht alles über den
Docker-Container behandeln, aber ich möchte euch zumindest
zeigen, wie man
ein Docker-Image erstellt , mit dem
genau eine Verbindung hergestellt werden soll Und jetzt wird das jetzt nach Local
suchen. Das ist falsch, weil es versuchen wird,
eine Verbindung zum lokalen Host herzustellen. Denken Sie daran, Lokaler Host
in einem Docker-Container. Ja, das ist das Problem.
Lokaler Host in einem Docker-Container
ist nicht derselbe Da es nicht dasselbe ist wie ein
lokaler Host und ein lokales System. Erinnerst du dich jetzt, wie der Name ist? Linux, das Image ist eine
virtuelle Umgebung, eine völlig andere
Umgebung. Es wird uns also nicht finden. Was ich tun kann, ist, dies auf Postgres
einzustellen. Wenn ich das auf Postgres
setze, werde ich Ich werde meinen Docker ausführen,
diesen Teil hier,
ich starte diesen Typen, wenn
Sie Postgres überprüfen,
er läuft als Postgres . Wenn wir überprüfen, ob Container laufen, ist das ein Container , der
läuft Es gibt einen Container, auf dem der Code
Pogre ausgeführt wird . Wie lautet der Name jetzt Namen. In Ordnung. Also sollte das
als Postgres laufen, oder? Also sollten wir einen
Namen namens Posgra haben. Also, wenn du das versuchst, würde
das tatsächlich eine Verbindung herstellen. Wenn wir das tun,
würde das tatsächlich eine Verbindung herstellen. Lass uns VN Aber Paket machen, richtig? Das ist wirklich ziemlich lang, Mann. Das ist wirklich
ziemlich lang. Aber ich wollte das in
dieser Hinsicht
nur schnell beenden , damit wir nicht einfach herkommen
müssen. Lass mich das ausziehen. Lass uns das nochmal machen. Lass uns das nochmal machen. Jetzt benutze ich
Postgas, 543, zwei. Post Gas wird jetzt der
Name des Containers sein. Suchen Sie jetzt nach dem Namen
des Containers und damit stellen Sie
eine Verbindung her. Ich denke, das ist im Grunde
das, was wir tun sollten. Dann habe ich einfach Docker Image, lass uns Image Remove entfernen sage, dass ein Container
das verwendet, mache
ich Container, Container, RM und dann Chef. Lass uns das nochmal
versuchen. Docker Aber lassen Sie uns
dieses Image erneut erstellen. Ich versuche das Bild zu sein. Es ist also bereits eine
Compose-Datei verfügbar. Ich möchte, dass
das benannt wird. Nun, eine zusammengesetzte Datei hat
normalerweise einen Parameter namens
Containername. Containername, also nenne
ich ihn Postgres. Ja. Ich weiß es nicht. Ich glaube, ich bin einfach alles mir
gerade in den Sinn kommt. Also lass uns das noch einmal ausführen.
Lassen Sie uns das erneut ausführen. Lassen Sie uns das erneut ausführen.
Jetzt, wo wir das ausführen, wollen wir uns den Namen
des Containers ansehen. Ich möchte nur, dass es der
Kurzname Postgres ist. Behälter. Sehen wir uns den Namen an. Behälter. Also das ist
okay, weißt du was? Ich glaube, bei der Konsole
friere ich ein bisschen. Ich bin ziemlich an die
Befehlszeile gewöhnt. Also lass uns das machen. Ich kann Docker Container LS machen. Okay, das sind also
Docker-Container. Der Name ist, weißt du, ich
will das nicht benennen weil es tatsächlich
von diesem Typen ausgeführt wird und
ich das nicht will Ich würde
also damit aufhören. Ich werde damit aufhören. Es ist
ein sehr langes Video. Also Leute, ich werde wahrscheinlich alles
Mögliche tun,
nur um sicherzustellen, dass diejenigen, von denen ich
nicht
genau weiß , was sie tun sollen,
genau wissen, wie sie damit umgehen sollen. Das
versuche ich tatsächlich zu tun. Also, anstatt
das ab Frühjahr laufen zu lassen, werde
ich das tun, was ich tun würde,
ist, es direkt auszuführen. Jetzt gibt es das, was Sie
Docker Hyphen Compose nennen, dann D Compose Up Also Hyphen Compose, was
es macht, ist es zu überprüfen, es gibt eine Compose-Datei in diesem
Teil und es ist Ja, es gibt einen Komponisten, diese Komponistendatei, dann versucht
sie aufzurufen Also Docker Hyphen Compose,
hoch, also lasst uns das machen.
Also, das ist vorbei Also hat es das angesprochen,
als es eine Verbindung erwartet. Also wenn wir überprüfen, dass es sich
um einen Container handelt. Also gut. Also dieses Fenster ist aufgebraucht. Lass uns zu einem anderen Fenster gehen. Es gibt also einen
Docker-Container LS. Siehst du? Der Name ist SPSGres. Das
wollte ich herausbringen Der Name ist also Pogresgus. Nun, da wir das jetzt getan haben, lassen Sie uns unseren Befehl erneut ausführen Lassen Sie uns diesen Docker ausführen. Docker Run, um einfach wieder eine
Verbindung herzustellen. Docker Run, dann lass uns das ausführen. Sie sollten danach suchen und darauf
achten, dass es keine
Verbindung mehr zum Loca-Host herstellen wird Verbindung mehr zum Loca-Host Ich verbinde mich
mit dem oder dem Typen, um
uns genau zu zeigen , ob er das tatsächlich sehen konnte Okay. Ich bin mir sicher, dass
genau das das Problem ist, ich weiß nicht, warum ich das jetzt nicht
herausfinde Ordnung, Leute, ich
will euch
nur zeigen ich im
nächsten Video zurückkomme , um euch zu
zeigen, wie es funktioniert Das ist schon ziemlich lang. tut mir wirklich leid, dass
das sehr lang ist,
aber ich möchte das nur genauer
erklären. Danke Leute. Tschüss.
41. Fehler in Docker 2 beheben: Hallo, alle zusammen. Z hier. Richtig. Ich möchte auch schnell einen Fehler
anzeigen, der
tatsächlich aufgetreten ist, oder? Im Grunde kein Fehler. Es war ein Prozess, bei dem ich
die Details zusammengetragen habe. Ich versuchte immer noch,
meine Gedanken zusammenzufassen. Ich dachte, ich würde das schnell
ansprechen. Wenn Sie sich also
das Video Punkt eins ansehen, schauen
Sie sich das Video an,
das das allernächste Video ist, während Sie sich
das allernächste Video ansehen. Dieser Verbündete stellt fest, dass es
sich bei der 21. Minute, der 21. Minute, um eine
lange Debugging-Sitzung handelt.
Ich glaube, das Video endete nach
fast 30 Minuten Es endete tatsächlich. 8 Minuten denen es wirklich
nur ums Debuggen ging Wenn ich empfehlen würde,
könntest du das wahrscheinlich überspringen. Dann nur Video von 21,
weiter zu Docker zwei. Lassen Sie uns zum Video
Docker Two übergehen.
Sie werden genau sehen, wie FIX die
Docker-Compose-Netzwerke tatsächlich verwendet Ich möchte das schnell erwähnen. Ich habe jedoch
eine ganze Reihe
wertvoller Informationen angesprochen , die für Sie später
in der Zukunft nützlich
sein könnten . Sie könnten also wahrscheinlich
einfach hier bleiben und sich
den gesamten Debugging-Prozess ansehen Außerdem möchte ich erwähnen, dass ich erwähnen
möchte , dass es in den Door Rs einen Teil gibt, in dem
tatsächlich der
Name des Listeners auf der Methode benannt wurde,
also der Name des Listeners
auf der Methode,
richtig tatsächlich der
Name des Listeners auf der Methode benannt wurde,
also der Name des Listeners
auf der Methode Dieser Name steht in der Methode. Sie könnten also tatsächlich unser Video 948
überspringen. Ja, in diesem Teil haben wir
im Grunde umbenannt. Genau wie das erste, das Video , das tatsächlich erwähnt wurde,
das Video, das Sie sich kurz vor
der zweiten Implementierung ansehen , gibt es ein Video mit dem Titel
Implement Payment Two. Ein Fiktionsfehler, der dort
tatsächlich erwähnt wurde. Darüber wird
gerade gesprochen. In diesem Docket 2 versuchen wir zu
testen,
wo wir mit dem
Postboten ankommen, und wir sehen nicht, dass die Aktion darin besteht, nicht zu
sehen,
dass sich die Aktion tatsächlich
in der Datenbank widerspiegelt Ihr könntet einfach
von Video 948 zu 14
32 springen und ich zeige euch genau, wo wir all diese Daten
benannt haben Wir nennen all diese,
wir haben eigentlich
alle Listener-IDs genannt , um die richtige Methode zu
bestätigen
, die Sie jetzt verwenden Das funktioniert wirklich
super, oder? Du könntest es einfach überspringen und
musst nicht warten. Sie können jedoch einfach hier bleiben, um den gesamten
Debugging-Prozess zu sehen Ich hatte nur das Gefühl, dass es ein bisschen langweilig
sein könnte, also möchte ich nicht, dass ihr frustriert seid Also habe ich beschlossen, das
wirklich zu erklären. Das ist eine Zusammenfassung. Ich
konnte es nicht noch einmal durchgehen. Wenn Sie zu Video kommen, wenn
Sie zu Docker eins kommen, wenn Sie zum 21. Video kommen, die 21. Minute, wollte ich sagen, Sie könnten schnell einfach überspringen dann den ganzen
Weg zu Docker zwei gehen Ich behebe den Fehler, den wir hier haben, oder du behebst einfach den
Debugging-Prozess Wenn Sie sich außerdem das Implementierungsvideo
ansehen, die zweite Zahlung, habe ich ein Video gemacht, das
den Fehler hervorhebt , auf den wir tatsächlich gestoßen sind, und dieser Pfeil wurde
tatsächlich in
voller Größe gesehen , wir versuchen, ihn mit Postman
zu testen,
und wir können ihn nicht wiedergeben, weil er die Datenbank nicht wiedergibt Also habe ich schnell
weitergemacht, um
euch einfach zu zeigen , wo der Fehler ist. Wir haben ihn
tatsächlich behoben, und wir haben ihn tatsächlich behoben Also bleib einfach hier, um zu
sehen, wie alles funktioniert. Danke Leute. Wir
sehen uns im Nest-Video.
42. Docker 2: Ordnung. Danke, Leute. Dann sind wir wieder
beim Fall Docker. Denken Sie daran, dass wir uns daran erinnern müssen, dass dies der letzte Fehler
war, den wir hatten, und ich bin mir sicher, dass der
Grund, warum wir diesen Fehler
haben, darin liegt, dass es keine Verbindung zu
den Anwendungen Verbindung zu
den Anwendungen herstellt, die Anwendung nicht
mit dem
Post-Guess innerhalb
derselben Anwendung
oder innerhalb derselben innerhalb
des Containers verbunden Post-Guess innerhalb
derselben Anwendung oder innerhalb derselben innerhalb ist, oder? Was mir jetzt aufgefallen ist, ist, das Netzwerk
nicht spezifiziert wurde. Jetzt hat DCA tatsächlich ein Konzept namens Netzwerke, in dem Container miteinander kommunizieren
können Wenn die Standardeinstellung
immer lautet, wenn Sie die Standardeinstellung nicht angeben, kommunizieren sie
nicht miteinander Standardmäßig habe
ich
dieses Modulus-Netzwerk aktiviert und es zu
einem Bridge-Netzwerk verbunden Bridge bedeutet, dass
eigentlich alle so reden sollten , als ob sie
sich auf demselben Beitrag befinden Aber selbst wenn es üblich ist, können
sie jetzt miteinander sprechen,
auch wenn es sich nicht um eine Treiberbrücke handelt. befinden sie sich jedoch im selben Jetzt
befinden sie sich jedoch im selben
Netzwerk und können miteinander
sprechen. Abgesehen davon, dass wir den
lokalen Host verwenden, mit dem wir zu einem anderen
Zeitpunkt
Probleme hatten , wird derselbe Beitrag dorthin gesendet. Ich sollte nach einem
Container namens Postgres suchen, und genau das habe
ich hier versucht zu erreichen Jetzt habe ich das erweitert und werde
jetzt
den Modult-Service Ich werde das jetzt
aufschreiben. Ich werde das und
das aufschreiben. Ich werde ihm das
aufschreiben lassen
und das kann dann eine Verbindung herstellen. Ich modelliere
es nach dem Namen des Containers,
platziere einen Namen und der
Name sollte ausreichen Ich verwende im Grunde nur den exakt gleichen Namen, der Name sollte ausreichen Nun, als nächstes das Image der
Bilder, das Sie erstellt haben. Erinnern Sie sich an das Image, das Sie
erstellt haben, das kalte Docker-Image, modellieren
Sie es dann Sie können sehen, was
wir damals gemacht haben. Aber in Wirklichkeit ist es eins, das Null ist. Jetzt haben wir es also da. Dann werde ich
das auf Pot et ET veröffentlichen. Ich stelle das auf Pots 5432 zur Verfügung. Also das hier zeige ich, Haustier. Dann ist Spring Active
Dev. Das ist perfekt aktiv. Ich denke nicht, dass das
wichtig ist, weil ich denke, dass die Standardeinstellung das ist,
was die Wahl ist. Dann will ich, dass es
vom Eitergas abhängt. Das ist Nachgas, oder? Ich möchte also, dass es vom Posengas abhängt. Dann platziere ich
es auch in demselben Netzwerk
und ich sage, es sollte mit weniger Aktien
wieder aufgenommen werden. Also was wir tun können, ist das
jetzt laufen zu lassen. Wenn wir das so ausführen, wie es ist, wird es zuerst ausgeführt,
weil dieses davon abhängig
ist. Es wird warten. Lassen Sie uns das ausführen.
Okay, schauen wir es uns an. Wie Sie sehen können,
ist Ws Guys betriebsbereit. Lassen Sie uns nun den Modult-Service überprüfen. Ordnung. Sie können sehen, dass diese Verbindung erfolgreich hergestellt wurde.
Es ist erfolgreich. Das letzte Video war ziemlich lang. Ich musste schnell
die hässliche Verpackung zeigen. Ich komme zurück, um zu
erklären, wie das funktioniert und wie Sie es
tatsächlich zum Laufen bringen
und jetzt eine Verbindung herstellen können. Das funktioniert auch.
Denken Sie daran, dass wir unseren Bereich freigelegt haben. Lassen Sie uns
den Aktuator einfach noch einmal laufen lassen, mal
sehen, ob er noch funktioniert? Oh ja, es funktioniert, weil
es jetzt verfügbar ist. Dies ist jetzt auf
80 80 verfügbar, versuchen Sie es mit dem anderen. Oh, das funktioniert. Atto. Das funktioniert auch Können wir Endpoint ausprobieren? Oh, klar, ja, wir können
Endpoint ausprobieren . Ipoint
sollte funktionieren Ich kann meine Skizze benutzen, meine Skizze
benutzen. Meine Skizze wie immer.
Ist mein Kratzer. Dann kann ich einfach
versuchen zu zahlen. Lass uns das nehmen. Ich kann einfach versuchen zu zahlen. Ich
denke, das ist ein Lineal, oder? Das ist ein Lineal. Ich versuche nur zu zahlen. Also
meine Postman-Fans benutzen einfach
Postman Also wird
alles nett und nett aussehen. Nett, cool. Gut, also
verkabele ich einfach alles rein. Also werde ich einfach neue Beiträge erstellen. Lass uns einen neuen Beitrag bekommen. Ich möchte eine neue Anfrage. Ich wähle das Schlüsselwort Graph? Ich möchte
kein Graph-Keyword. Lass uns sehen. Also ich möchte
eine neue Anfrage, also lass uns bitte Nein, ich will das nicht.
Gib mir Grafik K. Wie dem auch sei, lass uns sehen.
Also wähle ich das aus. Das ist die URL. IO. Dann lass uns sehen. Kann mir jemand sagen,
warum ich Grafik sage. Darf nicht grafisch dargestellt werden. Warum wählt
es die Standardeinstellung
als Grafik? Ich vertraue ihm. Bess ist wirklich interessant. Lass uns einfach diesen Kerl benutzen. Poste einen. Fehlt hier
etwas? Quest Neu was? Neues HTTP. Okay. Ich wusste nicht, dass
sie das haben. Lass uns das hier platzieren.
Dann brauchen wir die Leiche. Mein Körper Jason Jason kommt her. Dann führe einfach
ein paar Schnelltests durch. Dann suchen wir uns das einfach aus
. Sprich das aus. Wirf es einfach hier rein, Postbote. Das ist gut. Weniger Tests. Lass uns das
einfach entfernen. Lassen Sie uns einfach überprüfen, ob eine
Validierung immer noch wirksam wird. Wenn eine Validierung wirksam wird, lassen Sie mich diese auf Null setzen Lass uns das machen. Wie Sie sehen, gibt es immer noch
eine Bestätigung, Polymer größer ist
als Casmmia sagen sollen, vielleicht hätte
ich sagen sollen, dass die Menge größer sein
sollte als da, aber ich denke, ihr versteht Das funktioniert immer noch. Lassen Sie uns das wieder als
Test Test Six auf test.com
ersetzen Test Test Six auf test.com Gehen wir zur Z-Sechs. Lass uns das machen. In Ordnung.
Wir können sehen, dass das funktioniert. Wahrscheinlich sollte ich einfach die UID
zurückgeben. Aber wie dem auch sei, wir wissen genau
, was hier passiert. Ich gehe einfach hier rein. C hier, hier, komm her, komm her
und überprüfe einfach unsere Bestellungen. Nehmen wir die Sechs. Lassen Sie mich die Kennung oder
wählen, richtig? Lassen Sie uns dann den O-Typ kontrollieren. Ich möchte nur sichergehen, dass
diejenigen, die Postman benutzen, damit Sie sehen können, wie es auch funktioniert Gehen wir zu diesem
Skript und wählen wir unsere Bestellung aus. Diese Bestellung ist abgeschlossen. Ist das abgeschlossen. Ich bin einfach
hergekommen. Bestellung abgeschlossen. Also auch ein Beitrag zur Leiche als Jason. Dann suche ich mir diesen Typen aus und ich
mache das, ich suche mir diesen Typen aus und ich
nehme ihn und ich komme rein
, schmeiß ihn hier rein. Dann habe ich das getroffen. Was habe ich falsch gemacht? Siehst du? Ungültiges Protokoll. Mal sehen, Protokoll, HTP. Tut mir leid. Ich nehme zwei Dosen. Okay, lass uns das machen. Okay,
also abgeschlossen, wahr. Gehen wir zur Datenbank.
Lassen Sie uns sichergehen, dass alles funktioniert. Lassen Sie uns das auffrischen. Lass uns zu den Zahlungen
gehen. Also die Zahlungen sind nur die abgeschlossenen
Zahlungen, richtig? Die Daten, ich habe das rekodiert. Schauen wir uns also die Ereignisse an. Die Ereignisse
beinhalten das tatsächlich. Sie sehen also, dass einige Dinge hier noch nicht abgeschlossen
sind. Sie würden also
versuchen zu sagen, wir könnten tatsächlich
versuchen zu sagen, lassen Sie uns das alles abschließen. Ich rufe die Veranstaltung
einfach auf, um das Ganze abzulegen und zu sehen. Sie können sehen, dass es hier mehrere
Nullen gibt. Ich bin mir sicher, bis ich das ausführe
,
sollten all diese Nullen aus dem Weg geräumt sein und alles
sollte Ich denke, es ist
gut für uns, es auszuprobieren? Haben Sie den Endpunkt offengelegt?
Ich bin mir nicht sicher, ob wir das getan haben. Ich bin mir nicht sicher, ob wir
den Endpunkt offenlegen . Aber schauen wir es uns
einfach an. Lass es uns überprüfen.
Das sollte ein Ereignis sein. Ereignis, ja, wir enthüllen es. Maßnahmen zur Chancengleichheit aufdecken, das
nennen wir Event Action. Such dir den gleichen Kerl aus. Ich denke, es ist ein Get-Dann-Event. Aktion zum Ereignis. Also
lass uns auschecken. Das ist Aktion,
eine einzige Aktion. Ich glaube, nur eine, oh ja. Ich glaube, es ist einer. Aber ich bin daran interessiert
, alles zu veröffentlichen. Aber so oder so,
lass uns das einfach benutzen. Lass uns das benutzen, richtig?
Lass uns das benutzen. Lass uns sehen. Wir denken, das ist eine
Schnur, dann hol es dir. Lassen Sie uns zunächst überprüfen,
welche Aktion noch fehlt. Lassen Sie uns das überprüfen. Wir
werden es entziffern können Denken Sie daran, wir können es wissen. Das ist also eine abgeschlossene Bestellung, eine
abgeschlossene Bestellung, oder? Und welcher DTO
wird für die abgeschlossene Bestellung verwendet? Denken Sie daran, das DTO DTO
ist was? Also was bin ich? DTO, Dt ist komplette Bestellung,
DTO komplette Bestellung. Welcher andere fehlt dann?
Schließe einfach die Bestellung ab. Bestellung abschließen.
Was ist das Detail? Denken Sie daran, dass
wir gegen jeden einzelnen
von ihnen eine Aktion haben. Vollständige Bestellung, die hier drin
sein sollte, komplette Bestellung. Was ist die Aktion? Die
Aktion ist vollständige Zahlung. Ich kann einfach
herkommen und einfach Parameter
anfragen, Parameter
anfragen Was ist der Schlüssel? Lass mich
sehen. Platziert den Schlüssel. Der Schlüssel ist Handeln,
nur zum Handeln. Drücken Sie jetzt einfach hier drauf, richtig? Also lass uns das machen. Kein Inhalt. Ja,
so haben wir hinzugefügt. Du hast gesagt, kein Inhalt,
oder? Kein Inhalt. Mal sehen, ob es ausgelöst wird. Mal sehen, ob es auslöst.
Mal sehen, ob es auslöst. Okay. Lass mich die Logs überprüfen. Hast du die nicht ausgedruckt? Oh, wir haben
diese Anwendung nicht ausgeführt oder so. Das war ich? Oh nein, keine Dienstleistungen. Ich glaube, ich irre mich. Wir laufen von Docker,
wir laufen von Docker, also schauen wir uns
die Docker-Logs Ich habe mich tatsächlich geirrt. Es ist ein bisschen, lass uns die Docker-Logs
überprüfen, die Dienste überprüfen,
dann Container,
mal sehen, was in Ordnung ist Das sind also unsere Logs. Also das ist, mal sehen, der Zuhörer die komplette Reihenfolge, nicht gefunden, die
Berufung überspringt und den Inhalt verlässt Es geht also nicht darum, den
Zuhörer zu finden, woran liegt das? Wir veröffentlichen abgeschlossene Veranstaltungen. Okay, für vollständige Zahlungen, und das
wurde nicht gefunden. Lass uns sehen. Also drängen wir diesen Typen,
wir drängen diesen Typen, und lassen Sie uns anfangen,
Zahlungen, Zahlungen, Zahlungen, Zahlungen,
Zahlungen, Zahlungen,
Zahlungen, Zahlungen
abzuschließen Zahlungen, Zahlungen, Zahlungen, Zahlungen,
Zahlungen, . Zahlungen. Also Zahlungsvorgang, abgeschlossen, ich
erwarte diesen Typen. Der zuhörende Zuhörer
wurde nicht gefunden. Der Zuhörer wurde nicht gefunden, das wäre ein Problem,
von dem aus wir ihn weitergeleitet haben. Haben wir eine
Transaktion dazu? Ein Transaktionsereignis. Vollständige Zahlung, wir
haben eine Transaktion,
die hier verfügbar ist die Ich glaube, wir haben diesen Fehler
schon früher gesehen. Lass uns das vorantreiben. Lass uns wieder reingehen. Oh ja. Lass uns sehen. Lass uns sehen. Veröffentlichen. Ich
denke, wir haben es geschaffen, oder? Veröffentlichen. Er trifft diese Veranstaltung und sie versucht, diese zu treffen. Okay. Und wenn er das
versucht. Ich denke, wir könnten hier tatsächlich eine Transaktion
haben. Lass uns das vergleichen.
Testen Sie, lassen Sie uns sehen. Er findet gerade keine
Transaktion. Okay. Ich dachte, du
hättest das tatsächlich herausgefunden. Das wird scheitern, weil
da etwas 88 ist. Lassen Sie uns das mit einem
Topf eins ausführen . Konnte keine Daten abrufen, ich weiß, weil
etwas anderes nicht stimmt. Ich weiß. Lokal Entschuldigung, es sollte localhost sein Ja. Dann sollten
wir nach Pot Spring gehen. Nein, das nicht. Ich glaube
ClebletPot oder Servlets, Töpfe. Server-Ports. Sehen Sie sich die Ports an, machen wir eine 81. Lass uns den Kerl leiten. Okay, von Anfang an Alles klar, also lass uns diese 881 laufen Lass uns sehen, was
passiert. Lassen Sie uns das ausführen. Ordnung. Kein Inhalt. Schauen wir uns das an.
Hier liegt also ein Fehler vor. Ich erhalte das IGT-Startfenster, Dienstfenster rundes Fenster. Okay, also ich sage, Listener hat den Aufruf von Listener nicht gefunden, und das ist der Grund, warum
wir dieses Problem haben Okay? In Ordnung. Lass mich das unterbrechen und sofort zurückgehen,
mal sehen, was passiert. A, danke Leute.
Ich hab's rausgefunden. Ich denke, das Problem
war sehr klar. Ich habe einfach nicht hingeschaut. Denken Sie daran, dass dies
das andere
Zahlungsdetail sein musste , das aktiviert war. Dann haben wir das geschrieben
, damit es auch läuft. Es war später im Kurs, ich musste es umbenennen, um Future
zu vervollständigen. Also wenn ich es mir ansehe, sucht
es nach
Paymentservice Dot On, oder? Zahlungsservice Punkt an. Und das beschriften wir jetzt. Wir haben es auf
Zahlungsservice umgestellt, um die Bestellung abzuschließen. Deshalb schlägt es fehl. Deshalb müssen Sie sicherstellen, dass Sie sicherstellen müssen
, dass der Listener, weil er den Listener des
Listeners zur Kenntnis
nimmt, es eine Klasse
gibt, die den Listener und den
Methodennamen hat der Listener, weil er den Listener des
Listeners zur Kenntnis
nimmt, es eine Klasse
gibt, die den Listener und den
Methodennamen hat. Also, was ist der schnelle Weg, das zu beheben? Also, um das zu beheben, was wir tun
können, ist herzukommen das
zumindest rauszuholen. Was wir tun können, ist zur Veröffentlichung der Veranstaltung
zu kommen. Dann überprüfen wir die Art der
Veranstaltung, richtig? Der Ereignistyp oder
der Listener-Writer. Wir überprüfen den Listener.
Dann ändern wir das Siehst du, es
sucht nach einer vollständigen Ordnung. Also haben wir das geändert
, um die Bestellung abzuschließen. Vollständig. Also ich denke, es ist
eine gute Möglichkeit für uns, zu debuggen , weil wir in Zukunft vielleicht
tatsächlich mit diesem
Gesicht konfrontiert werden.
Ich wusste es auch nicht, oder Hierher zu kommen, gibt
mir auch mehr Einblick.
Okay, wir müssen uns
dessen bewusst sein ,
da wir Probleme haben Okay. Okay, also
lasst uns das begehen. Ich kann das beenden, wenn ich es nicht von unserem Dockcontainer
aus abfeuere . Ich habe das alle laufen lassen. Ich habe das
immer noch laufen lassen Kommen wir zurück zu unseren Dienstleistungen. Unser Docker-Container
läuft also immer noch. also mit diesem Fehler Lassen Sie uns
also mit diesem Fehler erneut versuchen, uns
darauf zu konzentrieren Ich ändere das wieder auf 80 80. Ich habe den 881 debuggt, aber jetzt bin ich wieder bei 80
80, sofern das nicht der Fall ist. Lasst uns die Jungs treffen. Lass uns also gehen. Also das ist kein
Inhalt. Lass es uns herausfinden. Alles klar. Siehst du, komplett
oder das, was darin enthalten ist. Wenn wir zu diesem
Teil zurückkehren und damit beginnen, seht
ihr, dass alles
tatsächlich abgeschlossen ist. Alles ist abgeschlossen.
Ich denke, das ist eine gute Lernkurve
für alle und
wir können sehen, dass dies
häufige Fehler sind, auf die Sie stoßen
können, wenn Sie den Namen
ändern. Der Name Ihres Zuhörers
darf sich nicht ändern, die Methode darf sich nicht ändern Wenn der Cluster
Ihren Listener enthält und sich
die Methode ändert, hätten
Sie Probleme Sonst musst du kommen und diese Leute auf den
neuesten Stand bringen. In Ordnung. Also ich
wollte das nur zeigen und euch
dafür danken, dass ihr bis zu diesem Zeitpunkt
bei mir geblieben seid. Konnte alle Szenarien testen. Es gibt einige Tests
, die euch zeigen, wie
man den Docker-Container verkabelt, wie man einen
Docker-Container testet, euch
gezeigt hat, wie man
den Docker-Compose einrichtet und den anderen Dienst darin
platziert All diese Details
werden verfügbar sein. Sie wissen also ganz genau
, dass dies
ein voller Brunnen ist , dass
dies ein Modul ist. Ich denke, es wäre
gut für mich,
dies als gut zu bezeichnen, weil ich
glaube, dass wir es kopieren wollen Mein Git-Guider wird sich
einfach beschweren. Mein Git-Guider wird sich beschweren. Ich fange einfach damit an ,
damit jeder
benutzen kann, worauf er Lust Aber ich hoffe, ich kann es überspringen. Was ich tun kann, ist, das zu Git Guardian
hinzufügen, das zu Git
hinzufügen und das zu Git hinzufügen zu lassen . Dann lass uns zu Git Commit gehen. Nennen wir das D zwei. Nennen wir das
zumindest gerne
gegen, zumindest wollen wir uns dagegen
verpflichten. Nennen wir das einfach
Docker-Implementierung Ich denke, das sollten wir
Docker-Implementierung nennen .
Es ist gut, sich darauf festzulegen Ich glaube, ich habe den falschen genommen
. Sollte der richtige sein.
Ja, lass uns reinkommen. Ja, den, den ich
vorhin gezeigt habe, glaube ich, und das war der Kurs, den
ich persönlich entwickelt habe. Dann ist das der Kurs, in dem
ich das unterrichte, richtig? Dann lass uns herkommen.
Lass uns herkommen. Nennen wir es D, mal
sehen, Docker-Tests. Docker-Tests. Ja. Ich
denke, sie sollten funktionieren. Also lasst uns das
nebenbei festschreiben, damit wir es sehen können. Ich schließe. Es gibt eine Möglichkeit, Guardian zu
überspringen oder
N zu tun . Das ist für Git Guardian.
Es wird sich nicht beschweren. Sha Sha. Drücken wir auf Okay, also habe ich den Docker
Composer verfügbar gemacht, damit ihr damit testen und damit herumspielen könnt Jetzt zeige ich noch einen. Ich denke darüber nach, noch
einen Abschnitt zu zeigen. Ich denke, wir haben damit
eigentlich
alles im
Mix fertiggestellt , weil ich später noch ein
Video reinwerfen werde , um zu sehen, wie wir tatsächlich
tolle coole Sachen machen können. Also pass bitte einfach auf. Wenn
du mehr Videos herausfindest, schau sie dir
einfach an. Ich bin mir sicher, dass es
Ihre Lernkurve verbessert , wenn Sie genau wissen wie andere Dinge tatsächlich funktionieren. Oh, nun, ich glaube,
wir werden das Ende
zu Ende testen können . Wir haben einen
Integrationstest, wir haben einen Kabeltest. Wir haben tatsächlich eine Demo gemacht. Wir haben tatsächlich
das Szenario mit Inventar,
Inventar und ähnlichem umgedreht. Ich werde mehr über das
nächste Video sprechen. Ich danke dir.
43. Vorbereitung auf Kubernetes: Hallo, alle zusammen. Z hier. Ordnung. Jetzt, wo wir mit der Dekoration der
Anwendung
fertig sind, richtig? Ich habe Ihnen
drei verschiedene Möglichkeiten gezeigt, wie Sie
die Anwendung tatsächlich dekorieren können Wir haben uns den Bewegungspfad angesehen, bei dem Sie eigentlich einfach einen Bewegungsbefehl
ausführen könnten , der
tatsächlich das Sprungbrett verwendet. Das hat Ihnen das
Bild gezeigt Ich habe dir auch gezeigt,
wie man
die Docker-Datei tatsächlich benutzt , und ich habe dir diesen ersten Teil
gezeigt, ich habe dir auch
den zweiten Teil gezeigt Sie könnten das tatsächlich auf
verschiedene Arten verwenden , da Sie dafür entscheiden, dies tatsächlich zu tun Äh, der nächste Teil, den ich euch
zeigen möchte, was ziemlich
wichtig ist, ist, dass wir auf Coberts
umsteigen wollen, oder Und da wir beabsichtigen, zu Cubontis
überzugehen. In Ordnung Und wenn wir zu Cobertis
übergehen , müssen wir uns tatsächlich
um einige Dinge kümmern Und das Wichtigste, worauf
wir achten müssen, sind die Eigenschaften
, die Sie
tatsächlich lesen, richtig? die Eigenschaften
, die Sie
tatsächlich Dies liegt daran, dass die Anwendung etwas zustandslos
ist Wir haben sie tatsächlich
zustandslos verwendet Alle Daten werden also mit einer
Datenbank oder einer Eigenschaftendatei
externalisiert Datenbank oder Was würde also passieren, wenn
wir in der Produktion laufen, oder? Und sobald wir
die Anwendung bereitgestellt
haben, müssen wir die Eigenschaften der
Produktionsumgebung auswählen, und genau darauf werden
wir uns konzentrieren. Den ersten Teil werde ich anfassen, wenn Sie sich das
Docople ansehen. Schauen Sie sich Decofle an Ich habe hier tatsächlich
diese Eigenschaft eingestellt , die tatsächlich die Eigenschaft
für die Zeitzone festlegt Ich bin in Afrika, ich bin in
Legs und Javanga. Ich würde
hier eine weitere Immobilie hinzufügen, eine weitere Immobilie hinzufügen Ja. Und das würde eigentlich dem aktiven
Federprofil
entsprechen. Also hier
setzen wir bewusst auf Dev, aber im Moment
werden wir das ändern. Das sind Entwicklungsdaten. Wenn wir also zur Produktion
übergehen wollen, müssen
wir tatsächlich
passive Produktionswerte verwenden. Als Ergebnis würde also alles passieren,
was wir hier eingeben, was auch immer wir
hier als Spring-Profil übergeben,
das von
einer Befehlszeile
aus aktiv
ist hier als Spring-Profil übergeben oder von
einer Eigenschaft aus , die ich Ihnen
zeigen werde, wenn wir in Cubonts sind, genau das ist, was hier reinkommen
wird Wenn wir nichts setzen, wird kein Wert gefunden Wenn Sie keinen Wert angeben,
wird er hier eingegeben
und dann standardmäßig verwendet So funktioniert es, oder?
Ich priorisiere tatsächlich Befehlszeileneigenschaften gegenüber der Anwendung Yam,
dem Sobald das nicht
gefunden wird, wird es überschrieben. Das wird tatsächlich wirksam werden. Aber wenn das Federprofil tatsächlich gefunden
wird, lass mich das
einfach aufteilen, oder? Aber wenn das gefunden wird, wenn dieses Bit hier gefunden wird, wird
es automatisch geschrieben weil wir sehen, ich schreibe
Spring Profile sind Tipp. Ordnung, ich
will euch das nur zeigen, also denkt einfach daran,
während wir
diesen Teil erkunden und sehen, wie
das tatsächlich funktioniert. Okay, äh, davon abgesehen, lassen Sie uns jetzt wieder einsteigen. Also habe ich
das Erste geändert , was wir zur Kenntnis nehmen
werden. Also, wenn wir diese Eigenschaft
deklarieren wollen, ein Swing-Hyphen-Profil
deklarieren wollen, werde
ich das verwenden Ordnung, großartig. Also die nächste Grube, die wir uns
ansehen sollen, ist dieser Teil Wir müssen einige
dieser Daten in
Produktionsumgebungen übertragen, oder? Was würde ich also in meinem Fall tun? Was ich tun würde, ist ziemlich einfach. Ich würde dann hierher kommen und es unter der Eigenschaftsdatei
erstellen. Also ich werde einfach sagen, wenn ich
kopiere, werde ich einfach vorbeigehen. Also, um genau dasselbe zu sein, fange
ich an, den Wert zu ändern. Also cha zur Anwendung Docker. Also, verwenden Sie die
DocoFleuse Daco-Datei, verwenden Sie Doc FiaoSobald Sie die Spring-Profile als
Docker übergeben , werden tatsächlich
diese Eigenschaften verwendet diese Eigenschaften Wir wollen das ändern, wir wollen das wahrscheinlich auch lesen. Rufen wir an, nennen wir es einen Benutzernamen. Nenn es einfach Moduli. Unterstreiche usemin, richtig? Und die Standardeinstellung übergebe ich also ist es immer gut, dass du eine Standardeinstellung
hast, oder? Wenn es das nicht findet, ist
es standardmäßig so, oder? Es ist tatsächlich standardmäßig voreingestellt Einige
lehnen dies jedoch ab und sagen,
nein, wir wollen nicht zahlungsunfähig werden Ich möchte nicht voreingenommen werden
, um tatsächlich einzugreifen. Wenn es fehlschlägt, Standard. Aber ich werde einfach weitermachen
und dir Standard zeigen weil ich
versuche, dir alle
möglichen
Möglichkeiten aufzuzeigen , wie du
das machen könntest , damit du weißt, dass du hier
tatsächlich als Standard bestehen kannst, oder? Also lass uns hier reinkommen. Lass uns
hier dasselbe tun oder ein Passwort verwenden. Wir werden hier
mehrere Dinge ändern. Hierher kommen oder
herkommen oder das ändern. Das wäre Moduli
oder nenne es Host,
rufe ModuldHst auf und dann
hierher, dann Modulifsce hierher Nennen wir es Moduli Pots. Moduli hostet modulare Ports. Ich gebe dem eine Standardeinstellung von 5432,
weil das virtuelle
Level von Jungs 5432 weil das virtuelle
Level von Jungs Dann werden wir das auch ändern. Moduli DB-Name. Ich nenne es Moduli
DB oder Modly Db Name. Nun, was auch immer funktioniert. Also Modly DB-Name. Alles klar? Also das ist generisch. Diese würden sich ändern, oder? Ich würde mit
den anderen fünf vergleichen, dass
du damit fertig bist. Für den DD Lot
wird immer empfohlen, wenn Sie mit
der Produktion beginnen, oder? Es wäre ein Fall,
in dem Sie bereits umgezogen sind und das Skript bereits
ausgeführt haben. Wenn Sie GPA tatsächlich verwenden, um
Ihr Skript im Entwicklungsmodus auszuführen , müssen
Sie dieses Skript auswählen ,
es exportieren oder sichern,
je nachdem, was auch immer, und es dann in
die Produktionsdatenbank verschieben und Ihr
DBA-Team das
tatsächlich ausführen lassen je nachdem, was auch immer, und es dann in
die Produktionsdatenbank verschieben und Ihr DBA-Team das
tatsächlich Das ist genau das, was passieren
sollte, diese Eigenschaft ist Nicht erlaubt. Du darfst diese Immobilie
nicht in der
Produktion
betreiben, oder? Also werden wir
die Anwendung im Entwicklungsmodus für
dieselbe Datenbank
ausführen die Anwendung im Entwicklungsmodus für
dieselbe Datenbank , richtig? Um
Dinge tatsächlich zu simulieren, oder? Aber was passieren sollte, ist das nicht mehr da sein sollte weil wir bereits alle Immobilien bezogen
haben, die wir beabsichtigen, oder? Es wird also immer
empfohlen, dass Sie diese Option komplett
deaktivieren oder sie auf „Keine“
setzen. Aber dazu gibt es zwei
Denkrichtungen, oder? Die erste
Denkrichtung lautet: Weg damit. Niemand weiß auch nur, ob eine
Immobilie
hier geändert werden muss , oder sie hier lassen und sie so
lassen, wie sie bekannt ist, oder? Aber ich empfehle immer,
es auszuziehen, damit niemand auch nur
versucht ist , es zu ändern, um
es entweder zu erstellen oder zu
aktualisieren oder was auch immer die
anderen sind, die ich habe, oder? Ich lasse das als bekannt gelten, nur um dir zu zeigen, dass es diese
Eigenschaft gibt Dann verschiebe die Initialisierung auf true. Wir sind nicht mehr initialisiert. Unser gesamtes Skript ist
bereits verfügbar. Also wie du siehst, brauche
ich das nicht mehr wirklich, oder? Das würde niemals laufen, und dieses Skript sollte auch niemals ausgeführt werden, weil
es niemals laufen wird. All diese Eigenschaften
sollten nicht einmal existieren. Richtig? Abiti sollte
nicht einmal verfügbar sein. Du solltest
das alles nehmen oder weil die Anwendung
einfach direkt eine Verbindung herstellen soll Ich sollte das alles nicht
auschecken, weil wir bei
Updates einfach versuchen, nach Änderungen und Updates zu
suchen, Datenbanken zu
erstellen oder zu löschen
und sie einzubringen. Also wollen wir das alles nicht. Definiere die Initialisierung,
wir sind nicht anders. Wir initialisieren
es nicht, weil wir
dieses Skript und die
Produktionsdatenbank bereits ausgeführt haben dieses Skript und die
Produktionsdatenbank bereits Das ist also nicht wirklich notwendig, damit wir es
tatsächlich präsentieren Wir können das also praktisch
entfernen. Ich lasse es einfach hier , was wir nicht
alles haben, was wir brauchen, oder? Ich sage, diese
Dinge sind verfügbar. Sie sind verfügbar. So wie
wir einen Spiegel für unseren Entwickler haben. Teilen wir das einfach auf. Wir
haben einen Spiegel für diesen Teil. Also ich will
euch nur zeigen, dass ich es belasse, aber ich habe das
bis jetzt gesagt, damit ihr den Unterschied vergleichen
könnt. Aber denkt daran, dass ich schon erwähnt habe, das nicht in Produktion
gehen sollte. Das ist nicht okay,
geh zur Produktion. Das hat einen seltsamen Grund, manche
möchten vielleicht nur eine winzige Änderung vornehmen. Und vergiss, dass du das nicht einmal benutzen
solltest und benutze Update und nimm
ein paar zusätzliche Dinge mit
dir, die du nicht brauchst. Warum nicht das Skript, das
notwendig war, war falsch. Der ideale Weg, das Skript
aus Ihrer Testumgebung auszuwählen, das Skript in Ihrer
Produktionsdatenbank
auszuführen, aber die Erstellung der Tabellen und welche und was haben Sie. Tun Sie das. Dann verbinden Sie
die Anwendung damit. Das ist genau das,
was es sein soll. So wird sichergestellt, dass Ihre Anwendung
zustandslos bleibt, oder? Es sind die Daten, die
verfügbar sind, die Datenbank verwendet, es gibt keine Daten
in der Datenbank, es gibt nichts, was verwendet werden könnte, und genau
so sollten wir sein Ordnung. Also kommen wir auch her. Diese Teile haben wir nicht
wirklich erforscht, und ich würde immer
sagen, wir haben es auf den Fall eingestellt. Was dieser Typ im Grunde macht, ist, sagen wir, wir haben unvollständige
Ereignisse, die wir uns angesehen haben. Wenn wir dies auf che setzen, würden automatisch versuchen,
alle Ereignisse
auszulösen, sobald die
Anwendungen gestartet sind. Ich denke nicht, dass das
der richtige Ansatz ist. Wir sollten die Kontrolle darüber
übernehmen müssen. Aber wer weiß? Das Unternehmen könnte also entscheiden, dass
auch die Umgebung
entscheiden könnte , dass Sie
diesen Trigger an
jedem Neuron auslösen wollen , oder? Aber wenn Sie
sagen wollen, dass das wahr ist,
denken Sie daran, was wir
im Unvollständigen besprochen haben, also
versuchen wir, die Veranstaltung zu veröffentlichen Ich habe dir gesagt, dass du einen Scheduler
verwenden solltest und
ich habe euch gezeigt wie man den Scheduler benutzt, um das Ereignis
tatsächlich auszulösen Dann habe ich erwähnt, dass
Sie, wenn Sie mehr
als eine Instanz haben, darüber nachdenken müssen,
eine zu verwenden , Sie denken darüber nach, was es ist Shed Lock,
verwenden Sie die sehr
verbreitete Implementierung von MoPy Shedock, Sie können einfach im Internet
nachschauen, Shedok
verwenden, dann würde das tatsächlich passieren, wenn
Sie zwei Instanzen haben,
je nachdem, welche zuerst
den Schlüssel zur Datenbank erhält, sperrt es, das eine
Änderung vornimmt und das andere
nicht in der Lage ist , tatsächlich
mit dieser Anwendung zu interagieren. Das ist nur ein Überblick,
aber dieser Teil sollte immer auch so bleiben. Ich werde das nicht anfassen. Ja, wir nutzen
das, obwohl
ich es in der Bewerbung gestrichen habe, aber wenn Sie nachschauen, ob wir nachschauen, wo wir eigentlich veröffentlichen, wo wir unsere Veranstaltung hier
veröffentlichen,
habe ich das auskommentiert. Hier
verwenden wir es, oder? Ich habe es auskommentiert.
Hier benutzt Joy es. Also benutze ich die Umgebung
oder besorge mir Eigentum. Du könntest
das, was ich erwähnt habe, tatsächlich verwenden wo wir
ältere Anwendungen löschen wollen, oder? Ich wollte
euch das nur nochmal zeigen. Wir wollen
ältere Immobilien löschen. Sorry ältere Veröffentlichungen, ich meine Immobilien,
ältere Veröffentlichungen, nachdem wir sie eingereicht haben und
welche Auszeichnungen wir dann
festlegen können , werde ich noch
ein bisschen darüber nachdenken, oder? Und ich bin mir sicher, ihr
könnt einfach zurückgehen und wir schauen uns die Videos
an, um zu sehen, wie es funktioniert. Und das ist Teil des Programms
, das ich erwähnt habe. Aber das zeigt den Teil
des Schuppenschlosses. Wir können einfach im Entwicklungsmodus
nur eine Instanz haben. Aber wenn ihr
denkt, dass es weniger ist und ich ein paar Leute habe,
von denen ich nicht wirklich
weiß, wie man Shed Lock benutzt. Wir kommentieren
einfach, kommentieren einfach die Kommentare oder stellen
es einfach als Frage. Wenn ich in der Lage bin, fast eine gute Anzahl von
Leuten
zu sehen , die erwähnt werden, dass
sie nicht wissen, wie
man das Schuppenschloss benutzt, werde
ich das
tatsächlich umsetzen. Darauf werde ich warten, oder? Ich möchte nur zeigen,
warum dieser Pfad benutzt wird. Bald könnte ich sagen, aber
das sollte gefunden werden. Oh ja, es gibt zwei Möglichkeiten. Ich benutze die Umgebung
, um es hereinzubringen. Andere hätten es zu einem günstigen Preis verwenden können. Sie könnten
einen Wert verwenden, den Spring tatsächlich bereitstellt, den das Sprit
Framework tatsächlich bereitstellt Nun, ich bevorzuge es einfach, die Umgebung
zu verwenden. Ich bin einfach gerne konsequent. In einigen meiner Projekte
verwende ich durchweg einen Mehrwert. Also verwende ich eine Umgebung. Das Wichtigste ist, dass Sie in
einem Frühling mehrere Dinge tun können. Sie können dasselbe
im Frühling auf verschiedene Arten tun. Das ist das Wort. Seien Sie
jedoch konsequent. Das ist die Sache mit
dem Bildschirm, sei konsistent. Damit jeder hier
im Projekt weiß, dass
Sie konsistent sind, würde
ich mich darauf einlassen,
genau das zu verwenden, was Sie verwendet haben. Nur wenn Sie
Leistungsprobleme haben, oder wenn
sie wahrscheinlich an eine
Änderung denken können und sie sich
ändern werden , müssen Sie alles
ändern. Ordnung. Ich denke
, das ist erklärt. Also lass uns herkommen.
Ich werde das Gleiche tun und das hier platzieren. Ich nenne das Ereignisse, nenne
die Ereignisse unterstreichen. Nennen wir es Dauer von
Ereignissen löschen. Also löschen,
Ereignisse unterstreichen, Dauer unterstreichen. In Ordnung. Dann ja, dann gebe ich dir den Standardwert von 5.000
, den wir ursprünglich verwenden Okay, dann dieser Teil, richtig? Wir haben alles benutzt. Ja. Ich habe es gerade für
das Management veröffentlicht, das ist der Teil für
den Actuator, wo wir sehen wollten, was
der Actuator alles zu bieten hat. In der Produktion ist das aber nicht
ratsam. Du willst das nicht
in der Produktion machen, oder? Was Sie in der
Produktion wahrscheinlich tun möchten, ist, das, was Sie
benötigen, zur Verfügung zu stellen. Sie müssen nur das
offenlegen, was Sie benötigen. Du enthüllst nicht alles. Also
werde ich Folgendes tun. Also werden wir das tun,
also lasst uns darüber nachdenken. Okay, wir werden also, ich nenne das, nennen
wir es Akteur,
Aktuator, exponierte
Endpunkte
haben wir es Akteur,
Aktuator, , richtig Exponierte Endpunkte. Ordnung. Also ja, dann sollten wir vielleicht mit der
Standardeinstellung als Gesundheit gehen. Ich werde einfach nur Gesundheit veröffentlichen. Gesundheit sollte also das
einzige sein, was tatsächlich standardmäßig
verfügbar ist, wenn wir es
nicht tatsächlich hinter uns Aber während wir das tun, werde
ich versuchen zu sehen ob wir Gesundheit
und Module veröffentlichen können, oder? In Ordnung, dann Saba Pot. Auf W läuft dieser Saba? Okay. Also, die Leute
lieben es, ATAT zu benutzen Es wäre egal,
wann Sie tatsächlich auf
Kubernetes laufen , denn das
wäre Kubernetes,
Sie haben eine Einheit, in der Sie Dinge auf einem Pod
ausführen und
der Pot , auf dem Sie laufen,
bedeutet nicht wirklich , dass Sie das
auf Ihrem gesamten System haben, auch wenn ich das genauer
erklären würde Ich möchte
das nur erklären, damit ihr es beim TT belassen könnt.
Das hat keinen Einfluss,
wenn wir zurückkommen, können wir dann
entscheiden, auf welchen Pot ihr laufen
sollt. Was ich tun würde, ist
,
wieder hierher zu kommen Server-Pots zu machen. Dann würde ich dich tatsächlich
standardmäßig auf 80 81 einstellen. Genau so sollten
wir aussehen. Wie Sie sehen, haben wir
alle Eigenschaften
, die geändert werden müssen, externalisiert alle Eigenschaften
, die geändert werden müssen, Wählen Sie das aus und
während wir am
Abschnitt Cbonti arbeiten , nachdem wir
die grundlegenden Befehle durchgegangen sind,
versuchen Sie, die anderen Dinge zu erklären und wir arbeiten an Dann zeige ich
euch, wo all
diese
Eigenschaften einstecken könnte Danke, dass ihr mir das gegeben habt. Ich sehe euch
im nächsten Video.
44. Externalisierte Eigenschaften testen: Ordnung. Danke,
Leute. Danke, dass du mit M Z hierher zurückgekommen bist. Ordnung, da Sie
tatsächlich den Teil
der Externalisierung
aller Eigenschaften erledigt haben , sollte
es einfach
ideal sein, das Bild
neu zu erstellen,
denn wenn Sie dies nicht tun, sollte
es
diese zusätzlichen Details nicht enthalten Denken Sie daran, dass es sich um neue
Dateien oder das Hinzufügen von Dateien handelt. Wir müssen sicherstellen
, dass das tatsächlich die Docker-Registry
übertragen Lass uns das machen. Ich
mache VN BN sauber. Kann Paket reinigen, dann D, Tests überspringen. Dadurch wird die Anwendung beschädigt. Es wird höchstwahrscheinlich scheitern. Ich denke, das wird scheitern. Weil der Test
wahrscheinlich erfordert, dass dieser Teil
übersprungen wird, weil
wir diesen Teil überspringen. Wenn Sie den Test nicht übersprungen
haben, schlägt
dies im Grunde fehl weil dieser Docker Compose ,
weil dieser Docker Compose
nicht ausgeführt wird und Probleme auftreten wird, oder? Okay. Also ist das erledigt? Lass uns das sehen. Okay,
also wir haben das. In Ordnung. Also der nächste Teil ist so,
jetzt wo wir das haben, wir müssen bauen, ich
baue das Image und schiebe es in die
Registry, richtig? Um das zu tun, lass mich ganz sicher sein. Ich versuche
etwas zu sehen. Ich hatte es erwartet. wir sicher, dass alles
wie gewohnt funktioniert hat. Ich habe geputzt. Ich muss bauen. Ich
wollte den Test nicht. Okay. Okay, sieht gut aus. Nun, lass uns sehen. Lass uns das, das, das
putzen. Ziel kompilieren, aber das Bild. Okay. In Ordnung. Das ist gut. Claire. Sofern wir T nicht bauen , verwenden wir
denselben Dienstnamen. Aber eins oder Null in
den aktuellen Teilen, dann würde das im Grunde auf diese Docker-Datei
abzielen, und diese Docker-Datei würde
wiederum auf diese JAR-Datei abzielen Denn denken Sie daran,
wir verwenden ein Punktglas.
Verwenden Sie ein Sternglas, das
tatsächlich dazu passt Lass uns das machen. Lass uns das sehen. Lass uns das machen. Lass uns das vorantreiben, das sollte eigentlich reingehen. Oh ja. Also das ist extraktiv, alle Prozesse laufen Das ist also
erfolgreich abgeschlossen, oder? Das ist erfolgreich.
Schauen wir uns also unser Bild an. Wir machen ein Docker-Image. Lassen Sie mich das ansprechen
, weil es zu weit unten ist. Lassen Sie uns das ansprechen.
Ich mache ein Docker-Image Denken Sie daran, dass Sie
dies auf jedem Terminal tun können. Ich bevorzuge es einfach, da
ich dasselbe verwende. Da Intelligen über ein Terminal verfügt, verwende
ich es einfach direkt, sodass wir nicht zu verschiedenen Bildschirmen wechseln müssen Okay, also weniger Bild. Also das ist Modult
großartig. Also das ist cool Ein schärferer Weg, es zu tun, ich mache weniger
ein Bild als ich
moduliere , ich kann MOD
machen und dann Star Ja, das passt also allem, was
damit anfängt, oder? Du kannst also sehen, dass
das großartig ist, oder? Das ist großartig. Wir haben
das Bild verfügbar. Ich erinnere mich, dass es dasselbe Bild ist, das wir tatsächlich in unserer
Compose-Datei verwendet haben, oder? Das heißt, ich stimme mit dem
Namen überein, der dort bereits platziert ist, nämlich distal Null Nun, damit Sie die Anwendung
so ausführen können, wie sie ist, oder? Das würde automatisch
fehlschlagen, oder? Das würde automatisch fehlschlagen , denn denken Sie daran, dass die Anwendung dieses Handbuch verwenden
wird ,
um sich selbst auszuführen. Ich möchte
einen kleinen
Unterschied erklären , da dies für manche Leute verwirrend
klingen könnte . Denken Sie daran, dass diese Compose-Datei
generiert wurde , als wir unsere
Docker-Compose-Abhängigkeit verwenden, gibt.
Das wurde also generiert Wir haben
das bewusst hinzugefügt, als wir versuchen, die Docker-Bits zu
testen, oder? Das ist also absolut
nicht erforderlich. Wenn Sie gerade versuchen
, die Anwendung auszuführen, gehen
wir über die
Phase hinaus, in der die Anwendung
nur von
der IDE aus ausgeführt wird . Wir haben Docker ausprobiert und
versuchen ,
direkt zu Cubanits zu wechseln Wir haben hier jetzt einige
zusätzliche Details hinzugefügt, das ist Mal sehen, ob diese
Eigenschaften funktionieren würden, wenn wir sie
direkt
hinzufügen würden? Würde das in Docker funktionieren? Wenn es in Docker funktioniert, sollten wir in Coberti
kein Problem haben Wie testen wir das also? Das Erste, was ich
tun werde, ist,
diesen Dienst einfach so laufen zu lassen, wie er ist. Ich
würde nichts tun. Denken Sie daran, ich habe
all diese Teile des Videos in
dem Video erklärt , das
wir uns tatsächlich angesehen haben. Ich habe
all diese Teile erklärt. Ich denke, der einzige Unterschied besteht
jetzt darin, ob wir das auschecken, wir vergleichen, wir checken das aus, wir überprüfen die
Anwendungseigenschaften, ich verwende hier 80 81. Ich verwende hier 80 81. In Ordnung. Es ist nichts
falsch daran, es zu benutzen. Du kannst einfach bei
80 81 bleiben, oder? Ich möchte einfach konsequent sein. Lass uns wieder hierher gehen. Wir können einfach alles offenlegen
808-18-0801 Ich könnte sagen, T
81-Ziel 80 81 dem Ziel 80 80 aussetzen. Der Container
wird auf 88 laufen. Das, was dem
Host über
die Befehlszeile angezeigt
wird , wird 881 sein, oder? So funktioniert Docker. Das ist die Konfiguration. Das ist nicht 881. Lass
mich einfach konsequent sein Also nur bis 80 81 oder wahr, das entspricht dem , was wir hier tatsächlich haben. Lassen Sie uns das so laufen lassen, wie es ist. Wir haben diese
zusätzlichen Eigenschaften nicht hinzugefügt. Jetzt wollen wir sagen, lass
dieses Profil Docker sein. Denken Sie daran, wir haben hier
ein anderes Profil erstellt, Docker, lass es Docker sein Würde das anscheinend erwarten, dass
es scheitert. Das war es nicht, Sie
erwarten jetzt all diese Eigenschaften
, die nicht verfügbar sind, und
genau das sollte passieren. Lassen Sie uns das ausführen und
schauen wir uns an, wie wir spielen Schauen wir uns die Logs an, um genau zu
sehen, was passiert Ordnung. Also das
läuft und mal sehen. Denken Sie also daran, dass wir gesagt haben, dass Post Guess der erste
sein
würde, der ausgeführt wird, weil das von Post abhängt. Denken Sie daran, dass dies von Post Guess
abhängt, was ein Post-Guess-Service ist. Nun, da dieser Vorgang gestartet ist, schauen wir uns die Kosten der Module an. Also lass uns sehen. Spring moduliere, ich erwarte zu sehen, ich sehe Frühlingsprofil. Ich verstehe. Ich erwarte ein Frühjahrsprofil. Könnt ihr euch erinnern
, wo Spring Profile ist? Spring Profile haben wir in unserer Docker-Datei
verwendet. Schau dir das an. Docker-Datei Es versucht also, das Federprofil an
die aktiven
Federprofile weiterzugeben Federprofil an
die aktiven
Federprofile Sie sehen, die Dinge
beginnen zu kaputtgehen, was gut ist. Also, was ich tun würde,
lass uns zuerst damit aufhören. Lasst uns damit aufhören. Stopp. Und lass mich es töten. In Ordnung. Also komme ich zurück
zu meiner Compose-Datei. Jetzt bringst du
es zum Laufen, oder? Du versuchst
es zum Laufen zu bringen. Jetzt verwenden wir nicht direkt
aktive Federprofile. Ich verwende hier
Federprofile, richtig? Ich sage, benutze diese
Eigenschaft Spring Profile und übergebe sie an Spring
Profile ist hier aktiv. Ich habe es nur direkt benutzt,
also wird das nicht funktionieren. Der Reifen
wäre, ich würde
sagen, Spring Underscore Profile Das würde dem entsprechen
und ich werde Docker übergeben. Jetzt zieh das aus oder
fang einfach an. Also lass uns das
nochmal machen. Also gehen wir Schritt für Schritt vor,
damit ihr seht, wie es funktioniert, und jetzt
werden die Eigenschaften weitergegeben , damit alles Sinn
macht, oder? Also müssen wir nicht überspringen. Ich möchte das nicht überstürzen
, damit wir es
Schritt für Schritt verstehen können, denn wenn Sie eine
einzige Konfiguration verpassen, Sie fest, dass die
Anwendung nicht funktioniert Das kann ziemlich frustrierend sein In Ordnung, lassen Sie uns das noch einmal
ausführen. Nur nochmal dazu. Ich
werde zu diesen Teilen gehen. Denken Sie daran, Sie müssen
das nicht verwenden , wenn Sie intelligent klingen.
Gehen
Sie zu den Teilen, in denen Sie Ihr Compose
haben. Ich mache einfach Docker Compose Up und das
würde automatisch funktionieren Ich versuche zu verhindern, dass
zu viele Bildschirme gewechselt werden, damit wir nicht von einem
Bildschirm zum Ich werde ziemlich verwirrend sein. Aber du könntest einfach herkommen. Wir kommen einfach zu
einer beliebigen Befehlszeile, gehen zu den Teilen, in denen Sie dieses Projekt
tatsächlich haben. Sie haben diese
Docker-Compose-Datei. Ich würde
einfach meinen Teil hierher kopieren, ich kopiere den absoluten Pfad, ich komme und sehe mir das an, ich werde es haben, als ob ich Ls mache Du kannst meine Komposition einrichten,
ich könnte komponieren. Genau so wird
es aufgerufen, Docker Compose Up. Drücken Sie Docker Compose Up und
drücken Sie einfach die Eingabetaste. Ignoriere das Ignorieren ist nur die
automatische Vervollständigung Ignorieren Sie dies und das wird
tatsächlich dazu führen, dass es angezeigt wird. Ich komme zurück zu
Intelligent Terminal um es verkabeln zu lassen, damit wir weitermachen können,
was wir tun. Ordnung, lassen Sie mich
es von der Befehlszeile aus ausführen damit es Sinn macht, wie
Sie es machen werden. Da ich dasselbe verwende, verwende
ich hier ein Timing Out, also mache ich hier LS. Sie können also sehen, dass ich meine Compose-Datei
hier
habe , also
nehme ich sie einfach raus. Siehe D komponieren. In Ordnung. Also lass uns das machen. Also kannst du die
Samstage sehen, die Samstage. Ordnung. Also lass uns
sehen, was das Problem ist? Ich kann also sehen, dass sich das immer noch auf das Frühlingsprofil bezieht. Das heißt, es ist noch nicht verkabelt. Das ist keine Verkabelung.
Also lasst uns debuggen Lass uns debuggen. Lass uns
sehen, was passiert Lassen Sie uns debuggen. Also
gehe ich zurück zu meinem Terminal Wenn Sie es also nicht in
Dash ausführen, wird Dm weiterlaufen. Also werde ich zurückkommen
und es einfach runterholen. Lieber komponieren. Ich stoppe alles und das sollte automatisch aufhören. Großartig. In Ordnung. Kommen wir zurück,
da ist D Spring Profile. Lass uns sehen. Wir haben Spring
unter dem Scope-Profil. Wir haben benutzt. Das Profil Spring
under Scope. Ich stelle es
hier auf Docker ein, was fehlt mir? Frühlingsprofil aktiv. Ich erwarte, dass dieser Typ hier als Umgebung
auftaucht. Wir haben dieses
Frühjahrsprofil, mal sehen. Mal sehen. Wir verstehen das. Die Dinge
lesen es einfach direkt. Okay. In Ordnung. Ich bräuchte hier ein ENV. Ich benötige ein ENV-EMV,
also müssen wir die Docker-Datei, die ENV-Datei so verkabeln, dass sie eine Umgebungsvariable sein soll Lass mich das einfach holen. In Ordnung. Danke. Danke
, dass du zu mir gekommen bist. Ich habe eine Änderung vorgenommen und die Änderung, die ich
vorgenommen habe , ist, dass Sie
die Spring P-Datei sehen. Ich habe es direkt benutzt. Also benutze ich es direkt
auf diese Weise. Richtig? Ich benutze Dilin auf diese Weise Und das hat zur Folge , dass Sie es als Zeichenfolge
sehen Ich muss es interpolieren. Es heißt
String-Interpolation. Ich muss es
zwischen den Kalibern platzieren. Das wäre dann
in der Lage, es zu lesen. Also haben wir das als Docker gesagt,
Sie werden es lesen können. Das wollte ich tun. Das müssen
wir tun, um erneut zu laufen. Denken Sie daran, dass wir
diese Änderung mit
dieser Docker-Datei vornehmen und die
Docker-Datei wird verwendet, um
unser Image zu erstellen und die Image-Aspekte und die
Image-Aspekte die wir
haben alles, den Jab Lass uns einfach weitermachen und
das nochmal machen, eine Bewegung machen. Paket D säubern
Tests überspringen. In Ordnung. Also das sollte
fast sofort abgeschlossen sein , weil
es keine Zeit in Anspruch nimmt. Also gut,
damit machen wir es. Als Nächstes müssen wir uns das Bild schnell
ansehen. Lass uns einfach dieses Bild kaufen. Also das Bild aufbauen. Denken Sie daran, dass ich all
diese Befehle bereits erwähnt habe. Das ist also gebaut. Lassen Sie uns unser Bild
bestätigen. Wie ich
dort erwähnt habe, ist das Docker-Image weniger als das von Modu the SA. Wir haben das gebaut. Okay. Gut. Wir haben das erledigt.
Das ist nicht korrekt. Das ist alles, was wir erreichen müssen. Lassen Sie uns das jetzt ausführen. Lassen Sie uns ein Docker Compose Up machen und
sehen, was passiert Docker Compose Up. Bevor wir uns wirklich damit befassen, denken Sie daran, wir versuchen diesen
bestimmten Typen hier
herauszuholen Wir versuchen,
das auszuführen, um zu sehen, was wir hier als
Spin-Profil als
Docker übergeben . Ändert es sich jetzt Hat die
Umgebung die Änderung des Profils auf Docker vorgenommen, wodurch
dieser spezielle
Pfad ausgelöst wird , und wir gehen davon aus fallen wird, sodass wir
all diese Details eingeben müssen, richtig All diese Details. Wenn wir diese Details
nicht weitergeben, sollte die Standardeinstellung verwendet werden.
Das ist es, was wir sagen. Die Details
wurden nicht gefunden. Verwenden Sie die Standardeinstellung. Wenn wir das finden, während Modulit
unser Modul findet , was ist dann damit?
Denken Sie daran, dass wir das nicht eingestellt Wir haben diesen
speziellen nicht festgelegt. Richtig? Das
sollte also wegen des DB-Datenbanknamens fehlschlagen, den
wir nicht angegeben haben, oder? Weil wir keinen Standard übergeben genauso wie wir einen
Standard dafür übergeben haben, oder? Ich lasse gerne einen,
damit ich
genau sehen kann, wie es sich anfühlt, also
zeige genau, was passiert ist. Okay, also lass uns das machen.
Also läuft das? Der Docker Compose,
der Nachgasdruck ist aufgebraucht. Jetzt läuft die Anwendung. Sie sehen, das schlägt fehl.
Das ist ein Fehlschlag. Schauen wir uns den Misserfolg an.
Lass uns ein bisschen nach oben gehen. Warum scheitert es?
Siehst du, großartig. Ein Profil ist jetzt Docker.
Das ist Lesen Warum scheitert es jetzt? Ist kein Zeiger
eine Ausnahme, weil warum? Ist ein Vergleich, wenn Sie es sich ansehen dass es sich
über die Datenbank beschwert, es beschwert sich darüber, dass es
versucht, eine Verbindung zu JDBC herzustellen, und anscheinend kann es keine Verbindung herstellen ,
weil es nach einem Nein-Zeiger
sucht gibt nein, wir haben es nicht
wirklich übergeben ,
also
erwarten wir eine Zeichenfolge als
Wert der Datenbank , aber wir
übergeben eine Null weil wir nichts Das entspricht also unserer Anfrage. Lassen Sie uns das schnell weitergeben,
es sei denn, die Dinge funktionieren. Also gehe ich schnell hier rein
und mache Docker Compose down, um schnell
alles herunterzufahren Und das würde
das sofort beenden. Gut. Also
das hört sofort auf. Ja. In Ordnung, also
lass uns das klären Also, das
klärt das tatsächlich auf. Okay, das heißt
gesagt und getan. Denken Sie daran, dass wir hier die Standardeinstellung bestanden
haben. Ich habe Ihnen gerade gezeigt
, dass diese Standardeinstellung für uns hier
automatisch übergeben wird. Wenn es das nicht
sieht, wählt es all das aus. Also,
anstatt Standardwerte zu übergeben, machen wir das Propertin, ich mache das richtige Tin, indem
ich all diese Werte setze , die wir erhalten Also sind wir mit dem Docofle fertig. Jetzt sind wir beim Komponieren. Nun, was sind die Werte, die wir setzen? Also setzen wir dieses Modul. Komm runter, Modulf
und stell das ein, richtig? Das ist Modulth, das ich
als Zeichenfolge übergebe, es sind Zeichenketten. Dann Passwort auch Modulus. Paket auch Stimmung, kopiere
diesen Ort einfach hier her. Dann sind die Gastgeber der Gastgeber. Das ist Datenbank. Denken Sie daran,
ich habe Ihnen gegenüber bereits erwähnt, dass, sobald
Sie mit dem Docker-Container, mit dem Docker-Container, gearbeitet
haben, wir für einen
sehr langen Prozess debuggen Wir müssen den Dienstnamen verwenden, weil sie zum selben Netzwerk gehören.
Ich erkläre das. Wenn Sie verwirrt sind,
schauen
Sie sich bitte Doris Teil eins und DP zwei Ich erkläre das im Detail,
wie sie
sein sollen, um eine Verbindung
zum Dienstnamen Der Gastgeber. Sehen Sie sich den Host an, mit dem
Sie eine Verbindung herstellen. Soll ein
PoscastPCAS-Dienst sein. Damit stellen wir eine Verbindung her. Dann
ist der Topf schon verkabelt. Mach weiter und beschrifte es trotzdem. Das ist dasselbe,
den Gastgeber dann 5432 zu bringen. Dann der DB-Name. DB-Name. Ich wähle den DB-Namen. Ich habe das
nicht vorhin überwiesen. Ich habe den DB-Namen von hier eingegeben. Das ist Datenbank. Lassen Sie mich einfach konsistent sein und
alles als Zeichenfolge übergeben. Also als Zeichenfolge. Ich
glaube, eine Zahl, oder? Aber ich glaube, du wirst
stechen. Wir werden es überprüfen. Wir werden sehen, ob es es
tatsächlich akzeptiert. Okay, was sonst? Dann verzögert sich die Dauer dieses
Ereignisses. Also kann ich das einfach bewusst auf 4.000
setzen, oder? Nur um die
Dinge ein bisschen zu ändern. Dann dieser Aktuator. Sehen wir uns nun den Aktuator an
, der freigelegt ist. Denken Sie daran, es geht nur um Gesundheit. Was ist also, wenn ich Gesundheit preisgeben
möchte? Comer Modul. Denken Sie daran, wir sollten in der Lage
sein,
den Zustand und das Modul, das
es bereitstellt, damit zu sehen . Ordnung. Dann der Server, auf
welchem Server laufen wir 80 81. Fügen wir hier auch den Pot hinzu
, um auf 80 81 zu laufen. In Ordnung. Wir haben ziemlich viel gearbeitet. Ziemlich viel Arbeit. In Ordnung, wenn das erledigt ist, lassen Sie uns Docker Compose Up ausführen Mal sehen und
jeden Fehler beheben, wenn es Docker Compose,
Compost Line Up, Compost Up Ich habe euch gezeigt,
wie das funktioniert. Anstatt
den Befehl jedes Mal einzugeben, verwende
ich einfach die
intelligenten Tastenkombinationen. Also Gewohnheiten sind es eigentlich nicht. Ich werde das machen. In Ordnung. Also das ist vorbei, siehst du,
der Beitrag ist online. Mal sehen, was hier passiert. Ordnung. Könnt
ihr sehen, dass etwas Unglaubliches passiert?
Kannst du das sehen? Fantastisch. Damit ich den
Docker sehen kann. Das ist das Profil Sie können sehen, dass die Datenbank abgeschlossen ist, dass die Verbindung erfolgreich hergestellt wurde und dass keine Fehler ausgegeben wurden. Der Beweis
dafür besteht also darin, dass wir nur den Zustand
und das Modul
offenlegen. Lassen Sie uns das also
bestätigen. Erinnerst du dich, wir enthüllen gerade, was auf 80 81 steht Das passiert auf
80 81, wie Sie sehen,
80 81, aber ich mache es auch
auf 80 81 So verwirrt. Ist das 80 81 oder ist das für den Host oder
ist das für den Container? Lassen Sie mich das schnell
herunterbringen. Ich werde das runterholen, dann werde
ich es auf 80 80 aufdecken. Sie können nur auf 80 80 zugreifen, aber der Container
läuft auf 80 81. Ich möchte den
Unterschied herausfinden. versuche
ich, diesen Prozess zu
durchlaufen. Gehen wir hoch und starten
diese Dienste. Okay. Also du kannst sehen, dass
das läuft, die Datenbank ist aktiv. Lass uns das sehen. Okay, die Verbindung wurde erfolgreich hergestellt,
und was können wir sehen? Womit habe ich angefangen? 80 81. Aber denken Sie daran, wir werden
auf das Internet zugreifen 80 80. Lassen Sie uns versuchen, das einzuschätzen.
Versuchen wir es mit 80 81. Lassen Sie uns versuchen, 80
81 zu bewerten. Lass uns herausfinden, was passiert Also Local Host 80 81, richtig? 80 81, dann mach Atria oder
es kann nichts finden. Es gibt nichts, was man Baum nennt. Es gibt nichts Vergleichbares
, es gibt eine 81. Es ist nichts falsch an 881, weil wir mit
ATT betrieben werden. Gehen wir zurück zu ATT. In Ordnung. Könnt ihr
das sehen? Konnte ich die Gesundheit
aufdecken, Mod Lef
entlarven Das funktioniert tatsächlich so,
wie wir es beabsichtigt haben. Das ist einfach unglaublich.
Leute. Das ist unglaublich. Das ist wirklich, wirklich unglaublich. Das können wir tatsächlich tun. Nun, so führe ich meinen Test und ich zeige
diesen Teil bewusst , damit wir
wissen, wie er läuft. Ich habe das getan, damit
ihr versteht , dass, wenn ihr
versucht , eure Anwendung auf Kubernetes
umzustellen, ihr in der Lage sein
müsst, sie auf Docker zum
Laufen zu bringen Wenn Sie nur direkt auf
Kubernetes verweisen und aus irgendeinem Grund Kubernetes nicht
in Ihrer lokalen Umgebung haben, haben
Sie mehrere Fehler, weil
Sie so viel Debugging durchführen Was ihr tun müsst, ist, dass ich euch
gezeigt habe, wie man diese Leute verbindet Mit Docker Compose können Sie die Datenbank
und auch den Dienst
verbinden Ich habe darüber gesprochen, wie man
das Netzwerk miteinander verbindet. Ich weiß nicht, ob ich das erwähnt
habe, aber wenn ich es nicht getan habe, dieses Netzwerk in
dem Moment,
in dem Sie
Ihr Netzwerk so einrichten automatisch erstellt dieses Netzwerk in
dem Moment,
in dem Sie
Ihr Netzwerk so einrichten, automatisch das Volumen und das
Netzwerk für Sie, oder? Denn wenn ich das nicht tun würde, müsste
ich
einen uronischen Befehl ausführen , den Docker Volume erstellt Ich gebe Ihnen den Namen
Docker Aber wenn Sie dies innerhalb
der Docker-Compose-Datei
Compose werden automatisch das Netzwerk
und das
Volume erstellt und Und ich habe euch gezeigt,
wie man das verkabelt und ich habe es Schritt für Schritt gezeigt Kannst du dir also bitte die anderen Videos oder die
vorherigen Videos auf Docker Rice ansehen, um zu sehen,
wie ich das alles
eingebracht habe und das machen
konnte? Die zusätzliche Sache, die ich in
diesem Video mache, ist,
euch zu zeigen , wie man
all diese Details miteinander verbindet Ich habe es Ihnen ohne diese
Umgebungseigenschaft gezeigt, ich werde auf Docker verweisen Ich scheitere, und wir
können sehen, warum wir eigentlich gezeigt haben, wir
konnten sehen, wie das funktioniert Und um es uns zu beweisen, habe ich
den Pot 881 entfernt und auf ATAT umgestellt Der Container ist also auf 80 81 und dieser ist auf ATAT, sodass wir
sie
tatsächlich verbinden und genehmigen
können Eine andere Möglichkeit, um zu überprüfen , auf welchem Pot Ihr Dienst
läuft Dies ist für Windows-Benutzer. Für andere Benutzer
können Sie dasselbe tun. Sie tun dies, indem wir ein Terminal
öffnen. Lass uns das Terminal öffnen. Net startet AO und sucht dann STR. Das ist ausschließlich für Windows, dann übergibst du die Pots 80 81. Nun, an 881 ist nichts
falsch. Deshalb zeigt das
nichts. Aber ich habe 88 bestanden, kannst du sehen? Es zeigt mehr Details als Tight. Sie haben auch Net unter Linux, das diesmal auch auf
Mac übersetzt, anstatt 881 zu verwenden, indem Sie Find
SEI mit Grab verwenden Anstatt ANO zu verwenden, weiß
ich nicht, ob sie
all diese Eigenschaften haben Sie könnten einfach für jeden
von ihnen eine Menge
Recherche in Anspruch nehmen und sie finden Verwenden Sie dann Grab, um einen
beliebigen Podlson 80 81 zu finden und Ihnen die Details zu
zeigen Ich will
euch das alles zeigen, ich kann
die Doc-Session abschließen Entschuldigung, Sie müssen die Sitzung zur
Externalisierung
der Bewerbung abschließen Sitzung zur
Externalisierung
der Bewerbung uns
auf den Umzug nach Cubert vorzubereiten Ich habe mir nur Zeit genommen, um zu
erklären, wie wir
Dinge auch in Doka mit einem Docer
Compose ausführen können , und wie Sie sehen können, laufen
beide Anwendungen, nämlich das Post
Guess und das Modul Ich führe zwei Dienste zusammen , um zu zeigen, wie sie sich
tatsächlich verbinden würden Ich denke, das ist ein
ziemlich guter Meilenstein. Ich würde uns den Stress ersparen. Ich würde das einfach überprüfen, um ein Problem zu überprüfen. Wie soll ich dieses Problem nennen? Wie sollte ich es nennen? Ich würde
sagen, Externisierung testen Also ich denke, so werde
ich
es wahrscheinlich das Testen der
Docker-Externalisierung nennen es wahrscheinlich das Testen der
Docker-Externalisierung Aber weil Sie
Tossing Ubertis verwenden, würde ich nur sagen: Testen Ich denke, diese Worte sind
nicht wirklich korrekt. Lass mich ein bisschen
darüber nachdenken. Ich glaube, ich habe mir
einen guten Namen ausgedacht. Und der Grund, warum ich versuche, mit
dem Namen
sehr spezifisch zu sein , sodass Sie, wenn Sie nur die genauen Commits und die Dinge,
die ich geändert habe,
sehen wollen , genau
wissen, was ich getan habe Und genau das
versuche ich zu sein,
deshalb versuche ich, sehr spezifisch zu
sein Ich nenne es, ich
hole diesen Typen rein. Ich nenne es testende,
externalisierte Eigenschaften. Das funktioniert also.
Also gut, ich wähle das aus. Gehen Sie jetzt in meine Akte. Ich mache einen Docker, überprüfe ein Git. CommitNEM übergibt, wenn es geschlossen wird. Dann ja. Okay, also bei all den vorgenommenen Änderungen können
Sie
tatsächlich daraus wählen. Also wird es Druck. Es sei denn, ich sehe das kommen,
oder? Ordnung, das ist also
in der Nähe. In Ordnung, Leute Wir sehen uns im nächsten Video. Jetzt, wo wir
das getan haben, denke
ich, ist es an der Zeit, dass wir uns
dann mit CuberTSPper Wir sehen uns im nächsten Video.
45. Modulith – Zusammenfassung: Hier, alle, hier. Es ist so toll
, dich hier zu haben. Wenn du
es bis zu diesem Punkt schaffst, herzlichen Glückwunsch.
Du bist ein Supersto Du warst in der Lage, so viel Wissen
anzuhäufen, Dinge detailliert
zu beschreiben
wie mich zu erforschen, zu komponieren, zu
wissen, wann und wann nicht. Identitätsdefinitionen, Sie sind in der Lage, Crowd over JPA zu
verwenden, obwohl Sie den
Unterschied zwischen ihnen genau kennen Jetzt kennen Sie die
Kernfunktionalitäten von Modul-IT, wissen, wie man Dinge in
verschiedene Module oder Pakete abstrahiert ,
wie manche es nennen würden, und wissen
dann, wann man sie verfügbar
macht und wann nicht. Das sind wirklich Tonnen von Wissen, das
Sie dort gesammelt haben. Sie kennen sich auch mit offenen Modulen
aus und wissen, wann Sie
Ihren Integrationstest durchführen genau
wissen,
wann ein neues Modul einsetzen müssen, um tatsächlich
mit einem anderen Modul zu kommunizieren. Zieh dir einfach deins an, Leute. Ich will auch nicht vergessen , dass du auch eine Massenveranstaltung hast, und hör zu, das ist
ziemlich toll. Jetzt weißt du
, wie man entkoppelt kommuniziert ,
was wunderbar ist Und ihr wisst jetzt, wie ihr eure Moduli it
dokumentiert, was ziemlich genial ist,
Leute, ziemlich , ziemlich Und ich freue mich wirklich,
wirklich sehr für dich Ordnung. Dies ist jedoch
nur die erste Rate Ich verspreche
dir immer ein Ende zu Ende. Das ist also die
erste Rate. Sie müssen sich
Dinge wie Pipeline, CICD-Pipeline ansehen, die im nächsten Kurs behandelt werden Im
Anschluss daran werden
wir uns Uberts im Detail ansehen So viel lustiges Zeug kommt noch, Leute. Ich hoffe, wir sehen uns
im zweiten Teil
dieses Kurses.
Alles, was Sie tun müssen, müssen
Sie zum
Beschreibungsabschnitt oder zum
A-Abschnitt gehen,
und Sie werden den Link
zu den anderen Kursen sehen, in
die Sie einfach einsteigen und sofort
anfangen können, sich zu engagieren Okay, Leute, seht
im nächsten Video.