Spring Modulith lernen: Monolith zu Microservices – Modulith verstehen | Ezekiel Eromosei | Skillshare
Suchen

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Spring Modulith lernen: Monolith zu Microservices – Modulith verstehen

teacher avatar Ezekiel Eromosei

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Einführung

      0:26

    • 2.

      Erforderliche Tools

      1:38

    • 3.

      Monolith vs. Microservices

      13:27

    • 4.

      Was wir bauen werden

      1:07

    • 5.

      Bootstrapping-Abhängigkeiten

      10:45

    • 6.

      Spring Boot Docker Compose erkunden

      6:19

    • 7.

      Spring Modulith-Abhängigkeit erkunden

      8:38

    • 8.

      Entitätsdefinition 1

      31:24

    • 9.

      Entitätsdefinition 2

      10:35

    • 10.

      Repositry-Zugriffsebene begrenzen

      3:18

    • 11.

      Inventar vorab füllen

      12:04

    • 12.

      Integrationstest 1

      16:44

    • 13.

      Integrationstest 2

      10:36

    • 14.

      Integrationstest 3

      5:47

    • 15.

      Benannte Schnittstelle

      19:54

    • 16.

      Benannte Schnittstelle 2

      6:45

    • 17.

      Bestellservice 0

      12:50

    • 18.

      Bestellservice 1

      17:39

    • 19.

      Bestellservice 2

      8:49

    • 20.

      Bestellservice 3

      7:45

    • 21.

      Veranstaltung

      11:32

    • 22.

      Veranstaltung 2

      10:59

    • 23.

      Fehlgeschlagenes Ereignis simulieren

      5:28

    • 24.

      Auftragsintegrationstest erstellen

      7:37

    • 25.

      Auftragsintegrationstest 2 erstellen

      8:03

    • 26.

      Modell-Event-Veröffentlichungstabelle

      16:32

    • 27.

      Ereignisaktion

      16:22

    • 28.

      Ereignisaktion 2

      12:31

    • 29.

      Unvollständige Veranstaltung erneut veröffentlichen

      14:08

    • 30.

      Unvollständige Veranstaltung 2 erneut veröffentlichen

      14:19

    • 31.

      Payment und E-Mail-Listener implementieren

      13:15

    • 32.

      Fehler in Zahlung implementieren 2 beheben

      1:28

    • 33.

      Zahlung 2 implementieren

      21:05

    • 34.

      Zahlung 3 implementieren

      3:23

    • 35.

      Ausnahme und Validierung

      19:50

    • 36.

      Ausnahme und Validierung 2

      15:43

    • 37.

      Modulith-Dokumentation

      13:39

    • 38.

      Modulith-Dokumentation 2

      1:32

    • 39.

      Laufzeitunterstützung und Aktor

      8:47

    • 40.

      Docker

      29:34

    • 41.

      Fehler in Docker 2 beheben

      3:22

    • 42.

      Docker 2

      20:07

    • 43.

      Vorbereitung auf Kubernetes

      14:49

    • 44.

      Externalisierte Eigenschaften testen

      25:10

    • 45.

      Modulith – Zusammenfassung

      1:57

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

3

Teilnehmer:innen

--

Projekt

Über diesen Kurs

In diesem Kurs lernen wir die Kernfunktionen von Spring Modulith kennen.

Du musst mindestens Java 8 kennen. Ich führe dich durch die
anderen Tools, die wir verwenden werden: Intellij Community-Version, Github, Postman, Docker Desktop  (ALLE sind KOSTENLOS)

Die folgende Beschreibung zeigt die Highlights, die wir in dem Projekt aufbauen werden

  • Es erklärt den Unterschied zwischen Monolith und Microservices
  • In diesem Kurs werden alle ersten Maven-Abhängigkeiten beschrieben, die wir verwenden werden, um das Projekt zu starten
  • Wir erkunden die Abhängigkeit von Spring Starter Docker-Compose
  • Wir erkunden auch die Modulith-Abhängigkeit
  • Der Kurs beschreibt die Verwendung der benannten Schnittstelle und ihre Anwendung
  • Wir setzen den Auftragsservice pragmatisch um und zeigen dir, wie er in das Gesamtbild passt
  • Wir sehen hier die Nutzung von Events
  • Unvollständige fehlgeschlagene Ereignisse erneut veröffentlichen
  • Simulation eines fehlgeschlagenen Ereignisses
  • Eine benutzerdefinierte Markerannotation verwenden, um neue Ereignisse dynamisch zu registrieren
  • Ausnahmebehandlung wird in diesem Kurs ausführlich untersucht
  • Wir schauen uns auch an, wie wir Eingabevalidierungen handhaben, um Angriffe oder unnötige Dateneingaben zu verhindern.
  • Wir werden mehrere Integrationstests schreiben, um unsere Implementierung zu validieren
  • Sie werden lernen, wie Sie Ihre Anwendung dockerisieren können
  • Sie lernen, wie Sie Ihre Immobilien exportieren können
  • Hier findest du eine Ressource mit dem GitHub-Projektlink (kostenlos) Diagramm der verbindenden Einheiten

Triff deine:n Kursleiter:in

Teacher Profile Image

Ezekiel Eromosei

Kursleiter:in
Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

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.