Auf der documentation von Spring Batch zum Konfigurieren eines Schritts beschreibt ein klares Bild, wie der Lesevorgang und das Schreiben durchgeführt wird.Spring-Batch-Dokumentation über Chunk-orientierten Schritt gegen die Realität?
read
process
...
read
process
// until #amountOfReadsAndProcesses = commit interval
write
entsprechenden (entsprechend dem DOC):
List items = new Arraylist();
for(int i = 0; i < commitInterval; i++){
Object item = itemReader.read()
Object processedItem = itemProcessor.process(item);
items.add(processedItem);
}
itemWriter.write(items);
Jedoch, wenn ich Debug- und einen Haltepunkt in dem Leseverfahren des Lesers gelegt und ein Unterbrechungspunkt in dem Prozeßverfahren des Prozessors I der SOE folgendes Verhalten:
read
...
read
// until #amountOfReads = commit interval
process
...
process
// until #amountOfProcesses = commit interval
write
So ist die Dokumentation falsch? Oder fehlt mir eine Konfiguration, damit sie sich wie die Dokumentation verhält (habe dort nichts gefunden).
Das Problem, das ich habe, ist, dass jedes aufeinanderfolgende Lesen jetzt von einem Status vom Prozessor abhängt. Der Leser ist ein Verbund, der zwei Quellen parallel liest, abhängig von den gelesenen Elementen in einer der Quellen werden nur die erste, zweite oder beide Quellen während einer Leseoperation gelesen. Der Status der zu lesenden Quellen wird jedoch im Prozessor festgelegt. Gegenwärtig ist die einzige Lösung das Commit-Intervall 1, das für die Performance nicht optimal ist.
Sie es mit einem benutzerdefinierten Reader versuchen könnten, die die Standard-Leser wickeln und Ihre eigene Logik –
Ja ich darüber nachgedacht, aber es ist nicht mit dem Modell einer Charge in der Schlange. Der Leser ist nicht dafür verantwortlich, eine Ausgabe zu erstellen. – Juru
Ich würde es mit Datenbanktabellen für die Quellen versuchen (Import mit dem ersten Batch) und lesen Sie die Daten mit einem richtigen SQL (zweiten Batch für die Geschäftsabwicklung) –