Wir haben eine alte Codebasis, von der ich denke, dass sie durch die Auswahl eines guten Stapelverarbeitungs-Frameworks verbessert werden kann.Spring batch best practice in Bezug auf Daten zwischen den Schritten
Ich habe angefangen, mit Spring Batch zu experimentieren und entschied (nach dem Lesen von Dokumenten, mehreren Büchern und Foren), dass der beste Weg, um ein Gefühl davon zu bekommen ist, es tatsächlich zu verwenden, also habe ich einige unserer neu entwickelt vorhandene Apps zu Spring Batch. Hier
ist die einfache Anwendung i saniert haben:
- lesen Zeilen aus einer Tabelle und analysieren Leitungen zu einem POJO
- Wenn ein Geben Kriterien erfüllt ist, ignorieren Sie das Element aus der Liste
- schreiben Sie eine Datei aus dem analysierten Liste
- Laden Sie die Datei auf einen FTP-
- Mark Elemente der Liste analysiert, wie in der db verarbeitet, wenn der FTP-Upload erfolgreich ist
Nun, was ich getan habe, ist ich einen einzigen Job mit 3 Schritten erstellt haben:
Schritt 1 ist: Linien zu POJO lesen (Leser, jdbc in diesem Fall basiert), Gegenstände auszuschließen (Prozessor), schreibe in Datei (writer). Einfach. :)
Schritt 2: Tasklet hochladen
Schritt 3 auf FTP: jetzt, das ist, wo ich bin in Schwierigkeiten. Ich muss die POJO-Liste von Step1 wiederverwenden.
Mein Verständnis ist, dass ich habe zwei Möglichkeiten:
1) entweder die StepExecutionContext verwendet, speichern Sie die Liste dort und eine ExecutionContextPromotionListener Implementierung die Liste zwischen Schritt 1 und Schritt 2 und Schritt 2 und Schritt 3 passieren.
oder
2) verwende ich die gleichen Leser und Prozessor und einem anderen Schreiber diese Zeit nutzen.
mir wirklich nicht gefallen Ansatz
1) scheint chaotisch und ich habe an mehreren Stellen gelesen, dass es keine gute Praxis ist etwas größer in diesem Zusammenhang zu setzen (meine Liste würde halten 5-10000 Objekte)
2) Scheint eine Verschwendung von Ressourcen und wieder eine schlechte Praxis. In diesem Szenario könnte ich damit durchkommen, aber im Fall eines komplexeren Lesers/Prozessors wäre es eine ziemlich schlechte Doppelarbeit.
Was ist der beste Weg zu tun, was ich tun möchte? Bin ich Spring Batch hier richtig?
Ja, das ist wahrscheinlich besser als meine beiden Optionen. :) Stil, jedoch muss ich eine Datei durchlaufen, die ich zuvor erstellt habe, also wird es langsamer und ein wenig verschwenderisch. Denkst du, ich nähere mich Spring Batch überhaupt? –
Noch eine Sache: ich würde nicht System Command Tasklet verwenden, das macht meinen Code abhängig von dem Server, auf dem es läuft, ich würde mein eigenes Tasklet schreiben, um FTP-Uploads zu behandeln. Aber das ist nur ein Detail :) –