In documentation di Spring Batch per la configurazione di un passo, un'immagine chiara descrive come viene eseguito il processo di lettura e scrittura.Documentazione Spring Batch sul passaggio orientato al chunk rispetto alla realtà?
read
process
...
read
process
// until #amountOfReadsAndProcesses = commit interval
write
corrispondente (secondo il documento):
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);
Tuttavia quando il debug e mettere un punto di interruzione nel metodo di lettura del lettore e un punto di interruzione nel metodo processo del processore vedo la comportamento seguente:
Quindi la documentazione è errata? O mi manca qualche configurazione per farlo comportarsi come la documentazione (non ho trovato nulla lì).
Il problema che ho è che ogni lettura consequetive ora dipende da uno stato dal processore. Il lettore è un composto che legge due sorgenti in parallelo, a seconda degli elementi letti in una delle fonti, solo la prima, la seconda o entrambe le fonti vengono lette durante un'operazione di lettura. Ma lo stato di quali fonti leggere è fatto nel processore. Attualmente l'unica soluzione sta per commit-interval 1, che non è molto ottimale per le prestazioni.
si potrebbe provare con un lettore personalizzato che avvolge il lettore di serie e la logica –
vostra abitudine Sì ho pensato a questo, ma la sua non è in linea con il modello di un lotto. Il lettore non è responsabile di creare un output. – Juru
lo proverei con le tabelle di database per le origini (importazione con primo lotto) e leggere i dati con un SQL corretto (secondo lotto per l'elaborazione aziendale) –