W usłudze documentation pakietu wiosennego do skonfigurowania kroku przezroczysty obraz opisuje, w jaki sposób odbywa się proces odczytu i zapisu.Wiosenna dokumentacja wsadowa dotycząca kroku zorientowanego na porcje a rzeczywistość?
read
process
...
read
process
// until #amountOfReadsAndProcesses = commit interval
write
odpowiednich (według dokumentu)
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);
Jednakże gdy debugowania i umieścić przerwania w sposobie odczytu czytnika i przerwania w sposobie proces procesora widzę następujące zachowanie:
read
...
read
// until #amountOfReads = commit interval
process
...
process
// until #amountOfProcesses = commit interval
write
Czy dokumentacja jest nieprawidłowa? Czy też brakuje mi jakiejś konfiguracji, aby zachowywać się jak dokumentacja (niczego tam nie znalazłem).
Problem polega na tym, że każdy kolejny odczytany teraz zależy od statusu z procesora. Czytnik jest kompozytem, który odczytuje dwa źródła równolegle, w zależności od odczytanych elementów w jednym ze źródeł tylko pierwsze, drugie lub oba źródła są odczytywane podczas jednej operacji odczytu. Ale stan, z którego źródła są czytane, dokonywany jest w procesorze. Obecnie jedynym rozwiązaniem jest przejście do commit-interval 1, które nie jest zbyt optymalne pod względem wydajności.
można go wypróbować za pomocą niestandardowego czytnika, który otacza standardowy czytnik i niestandardową logikę. –
Tak, pomyślałem o tym, ale nie jest to zgodne z modelem partii. Czytelnik nie ponosi odpowiedzialności za tworzenie danych wyjściowych. – Juru
Spróbowałbym z tabelami bazy danych dla źródeł (import z pierwszą partią) i odczytać dane z odpowiednim SQL (druga partia do przetwarzania biznesowego) –