Java >> Java Tutorial >  >> Tag >> Spring

Spring Batch Tutorial:Einführung

Die meisten Unternehmensanwendungen sind stark auf Batch-Jobs angewiesen. Sie laufen nachts und erledigen all die zeitraubenden Aufgaben, die während der Geschäftszeiten nicht erledigt werden können. Diese Aufgaben sind oft geschäftskritisch und Fehler können ernsthaften Schaden anrichten (d. h. viel Geld kosten).

Aus diesem Grund ist es wichtig, robuste Batch-Jobs zu schreiben, die die richtige Ausgabe liefern, fehlertolerant und so schnell wie möglich sind. Spring Batch kann Ihnen helfen, diese Ziele zu erreichen.

Dieser Blogbeitrag ist der erste Teil meines Spring Batch-Tutorials und bietet eine schnelle Einführung in Spring Batch. Nachdem Sie diesen Blogbeitrag gelesen haben, werden Sie:

  • Kann den Begriff Batch-Job angeben.
  • Verstehen Sie, warum Sie Spring Batch verwenden sollten, anstatt Ihre eigenen Batch-Jobs zu schreiben.
  • Kann die grundlegenden Bausteine ​​eines Spring Batch-Jobs identifizieren.

Beginnen wir mit der Definition des Begriffs Batch-Job.

Was ist ein Batch-Job?

Ein Batch-Job wird oft wie folgt definiert:

Ein Batch-Job ist ein Computerprogramm oder eine Reihe von Programmen, die im Batch-Modus verarbeitet werden. Dies bedeutet, dass eine Folge von Befehlen, die vom Betriebssystem ausgeführt werden sollen, in einer Datei (oft als Batch-Datei, Befehlsdatei oder Shell-Skript bezeichnet) aufgelistet und als eine Einheit zur Ausführung übermittelt wird.

Diese Definition ist jedoch nicht sehr pragmatisch und hilft Ihnen nicht zu verstehen, welche Art von Batch-Jobs von einer typischen Unternehmensanwendung benötigt werden. Deshalb werde ich meine eigene Definition bereitstellen:

Ein Batch-Job liest Eingabedaten, verarbeitet die Eingabedaten und schreibt die verarbeiteten Daten in die konfigurierte Ausgabe.

Die folgende Abbildung zeigt einen einfachen Batch-Job, der meine Definition erfüllt:

Wie Sie sehen können, hat dieser Batch-Job nur einen Schritt. Dies ist völlig in Ordnung, wenn Ihr Batch-Job nur eine logische Aufgabe hat. Wenn Sie beispielsweise einen Importjob implementieren, der Informationen aus einer Eingabedatei liest und in die Datenbank schreibt, hat Ihr Job nur eine logische Aufgabe.

Einige Batch-Jobs haben jedoch mehr als eine logische Aufgabe. Beispielsweise müssen Sie möglicherweise einen Batchauftrag implementieren, der Informationen aus einer Eingabedatei importiert und eine Exportdatei erstellt, die in andere Anwendungen exportiert wird. Mit anderen Worten, Ihr Batch-Job hat zwei logische Aufgaben. Das bedeutet, dass es auch zwei Schritte hat.

Es scheint, dass ich meine Definition umschreiben muss. Die endgültige Version ist:

Ein Batch-Job besteht aus einem oder mehreren Schritten. Jeder Schritt ist für die Erfüllung einer logischen Aufgabe verantwortlich. Jeder Schritt liest Eingangsdaten, verarbeitet die Eingangsdaten und schreibt die verarbeiteten Daten an den konfigurierten Ausgang. Wenn der Batch-Job mehr als einen Schritt hat, wird die Ausgabe eines Schritts oft als Eingabe für den nächsten Schritt verwendet.

Die folgende Abbildung zeigt einen Batch-Job mit zwei Schritten:

Ich habe jetzt den Begriff Batch-Job definiert. Lassen Sie uns herausfinden, warum Sie Ihre Batch-Jobs mit Spring Batch implementieren sollten.

Wie kann Spring Batch uns helfen?

Ich habe während meiner Karriere viele Batch-Jobs geschrieben und viele Batch-Jobs gesehen, die von anderen Entwicklern geschrieben wurden. Mir ist aufgefallen, dass die meisten nicht-trivialen Batch-Jobs (einschließlich meiner), die kein Framework oder keine Bibliothek verwenden, unter diesen Problemen leiden:

  • Der Code, der den Batch-Job implementiert, ist ein Durcheinander. Da es nur einen großen Schritt gibt, kann niemand wirklich verstehen, wie der Batch-Job funktioniert.
  • Der Batch-Job ist langsam, weil er alles innerhalb einer RIESIGEN Transaktion erledigt.
  • Der Batch-Job hat keine echte Fehlerbehandlung. Wenn während eines Stapeljobs ein Fehler auftritt, schlägt der Job einfach fehl. Wenn Sie Glück haben, schreibt der Batch-Job jedoch möglicherweise eine Fehlermeldung in eine Protokolldatei.
  • Der Stapeljob bereinigt nicht die Ausgabedaten, die in die konfigurierte Ausgabe geschrieben werden, wenn er fehlschlägt. Dies ist ein Problem, da Sie den Daten, die vom Stapelauftrag erzeugt werden, nicht vertrauen können. Das heißt, Sie müssen (manuell) sicherstellen, dass die Ausgabedaten des Batch-Jobs korrekt sind. Das ist Zeitverschwendung.
  • Der Batch-Job meldet seinen endgültigen Zustand nicht. Mit anderen Worten, es gibt keinen einfachen Weg herauszufinden, ob der Batch-Job erfolgreich abgeschlossen wurde.

Sie können (natürlich) jedes dieser Probleme beheben. Wenn Sie sich für diesen Ansatz entscheiden, stehen Sie vor zwei neuen Problemen:

  • Sie müssen im Wesentlichen ein internes Batch-Job-Framework erstellen, und es ist extrem schwierig, beim ersten Mal alles richtig zu machen.
  • Das Erstellen eines internen Batch-Job-Frameworks ist eine große Aufgabe und nimmt Zeit in Anspruch, die Sie nicht oft haben. Das bedeutet, dass Sie die Probleme, die in der ersten Version Ihres Batch-Job-Frameworks gefunden wurden, nicht beheben können, weil Sie dafür keine Zeit haben. Deshalb haben alle hauseigenen Frameworks ihre eigenen Besonderheiten.

Glücklicherweise müssen Sie kein eigenes Batch-Job-Framework implementieren, da Spring Batch all diese Probleme löst. Es bietet die folgenden Funktionen, die Ihnen helfen, diese Probleme zu lösen:

  • Es hilft Ihnen, Ihren Code sauber zu strukturieren, indem es die Infrastruktur bereitstellt, die zum Implementieren, Konfigurieren und Ausführen von Batch-Jobs verwendet wird.
  • Es verwendet eine sogenannte Chunk-orientierte Verarbeitung, bei der Elemente einzeln verarbeitet werden und die Transaktion festgeschrieben wird, wenn die Chunk-Größe erreicht ist. Mit anderen Worten, es bietet Ihnen eine einfache Möglichkeit, die Größe Ihrer Transaktionen zu verwalten.
  • Es bietet die richtige Fehlerbehandlung. Beispielsweise können Sie Elemente überspringen, wenn eine Ausnahme ausgelöst wird, und eine Wiederholungslogik konfigurieren, die verwendet wird, um zu bestimmen, ob Ihr Batchauftrag den fehlgeschlagenen Vorgang wiederholen soll. Sie können auch die Logik konfigurieren, die verwendet wird, um zu entscheiden, ob Ihre Transaktion zurückgesetzt werden soll.
  • Es schreibt ein umfassendes Protokoll in die verwendete Datenbank. Dieses Protokoll enthält die Metadaten aller Jobs und Schrittausführungen und ist äußerst nützlich, wenn Sie Fehler bei einem fehlgeschlagenen Batch-Job beheben müssen. Da das Protokoll in eine Datenbank geschrieben wird, können Sie mit einem Datenbankclient darauf zugreifen.

Sie sollten jetzt verstehen, dass Spring Batch die Probleme löst, die durch handschriftliche Batch-Jobs verursacht werden. Lassen Sie uns weitermachen und einen kurzen Blick auf die Schlüsselkomponenten eines Spring Batch-Jobs werfen.

Die Schlüsselkomponenten eines Spring-Batch-Jobs

Ein Spring Batch-Job besteht aus den folgenden Komponenten:

  • Der Job stellt einen einzelnen Spring Batch-Job dar. Jeder Job kann einen oder mehrere Schritte haben.
  • Der Step stellt eine eigenständige logische Aufgabe dar (d. h. Informationen aus einer Eingabedatei importieren). Jeder Schritt gehört zu einem Job.
  • Die ItemReader liest die Eingabedaten und stellt die gefundenen Elemente einzeln bereit. Eine ItemReader gehört zu einem Schritt und jeder Schritt muss einen ItemReader haben .
  • Der ItemProcessor wandelt Elemente in eine Form um, die von ItemWriter verstanden wird ein Artikel nach dem anderen. Ein ItemProcessor gehört zu einem Schritt und jeder Schritt kann einen ItemProcessor haben .
  • Der ItemWriter schreibt eine Information eines Elements in den Ausgang, Element für Element. Ein ItemWriter gehört zu einem Schritt und jeder Schritt muss einen ItemWriter haben

Die folgende Abbildung veranschaulicht die Beziehungen dieser Komponenten:

Sie können jetzt den Begriff Batch-Job definieren, Sie verstehen, warum Sie Spring Batch verwenden sollten, und Sie können die Schlüsselkomponenten eines Spring Batch-Jobs identifizieren. Fassen wir zusammen, was Sie aus diesem Blogbeitrag gelernt haben.

Zusammenfassung

Dieser Blogbeitrag hat Ihnen fünf Dinge beigebracht:

  • Ein Batch-Job besteht aus einem oder mehreren Schritten. Jeder Schritt ist für die Erfüllung einer logischen Aufgabe verantwortlich. Jeder Schritt liest Eingangsdaten, verarbeitet die Eingangsdaten und schreibt die verarbeiteten Daten an den konfigurierten Ausgang. Wenn der Batch-Job mehr als einen Schritt hat, wird die Ausgabe eines Schritts oft als Eingabe für den nächsten Schritt verwendet.
  • Sie sollten Spring Batch verwenden, da es die Probleme löst, die durch handschriftliche Batch-Jobs verursacht werden.
  • Ein Frühjahrspaket Job kann einen oder mehrere Schritte haben.
  • A Step muss einen ItemReader haben und ItemWriter .
  • A Step kann einen ItemProcessor haben .

Der nächste Teil dieses Tutorials beschreibt, wie Sie mit Maven die erforderlichen Abhängigkeiten erhalten.


Java-Tag