2015-07-24 9 views
11

Ich habe ein einfaches Programm mit Spring Batch Input Reader, Writer arbeiten. Der Zweck des Programms ist es, eine CSV-Datei einfach zu lesen.Spring Batch Commit-Intervall-Konfiguration funktioniert nicht

Ich habe die commit-interval auf 5 gesetzt. Die CSV-Datei hatte nur 5 Datensätze, aber aus irgendeinem Grund wurde der Writer 3 mal aufgerufen, obwohl die commit-interval auf 5 gesetzt war. Ich hatte erwartet, dass der Schreiber nur einmal aufgerufen werden würde Mein Verständnis, dass der Artikel Leser und Prozessor würde jedes Element Zeile für Zeile lesen und dann der Schreiber würde alle 5 auf einmal verarbeiten. Ich denke, ich bin mir nicht sicher, wie sich das Commit-Intervall auswirkt. Irgendwelche Ratschläge?

+0

Der Grund für meine Frage ist, dass ich eine Million Datensätze habe, die ich lesen und mit einer Java-Sammlung zum nächsten Schritt weiterleiten muss. Jetzt versuche ich, aus einer kleinen Datei nur den letzten Teil zu lesen, dessen Nummer gleich ist Das angegebene commit-interval wird mit StepExecution an den nächsten Schritt übergeben.Die vorherigen Datensätze werden nicht übergeben.Wie kann ich sicherstellen, dass alle Datensätze übergeben werden.Wird die Commit-Intervall-Hilfe geändert oder gibt es einen anderen Ansatz? – user5053360

+0

Ich benutze den ExecutionContext und ExecutionContextPromotionListener für diese. Aber nur der letzte Chunk, der gleich dem Commit-Intervall ist, wird gesetzt und im nächsten Schritt gelesen. – user5053360

+2

Bitte teilen Sie die Konfigurationsdatei. Ich möchte wissen, welche Art von "Reader", "Writer" und "Prozessor" Sie verwenden. – SyntaX

Antwort

0

Ich glaube, Sie so etwas wie haben sollte:

<job id="stepJob"> 
    <step id="step1"> 
     <tasklet> 
      <chunk reader="inputReader" writer="outputWriter" commit-interval="5"/> 
     </tasklet> 
    </step> 
</job> 

Das letzte Stück des Beispiels Schritt ist die Chunk-Tag, wo wir definieren, was ein Stück für den Schritt. Das Commit-Intervall-Attribut wird im Beispiel auf 5 gesetzt, dh es werden keine Datensätze geschrieben, bis 5 Datensätze gelesen und verarbeitet wurden.

Verwandte Themen