Я пытаюсь рассчитать несколько вещей на основе группы строк (из БД или CSV это не имеет большого значения).
Например: у меня есть 100 строк, каждая строка имеет Задержите поле , и я хочу получить averageDelay из этих 100 строк, чтобы создать ОДНУ строку с этим значением и другие данные из этих 100 строк (например, задержка превышает определенное время). 1006Я знаю, что весна может быть очень мощной, но мне здесь не хватает механики.
Мой код в основном основан на этом примере (который использует чанки) Но я только ищу хорошую структуру для начала!
Допустим, у меня естькласс InitialLine :
public class InitialLine{
private String feedID;
private LocalDate dateTime;
private Integer delay;
/* Proper getters and setters here */
}
И finalLine :
public class finalLine implements Serializable{
private String feedId;
private LocalDate dateTime;
private Float averageDelay;
// Delay greater than 100 second
private Integer delayGT100;
// Delay greater than 200 second
private Integer delayGT200;
/* Proper getters and setters here */
}
Будет ли мой ItemReader выглядеть примерно такэто:
public class initialLineReader extends ItemReader<List<InitialLine>>{
/* Declaration here*/
private FilesUtils fu;
@Override
public List<InitialLine> read(){
List<InitialLine> lines = fu.readInitialLines();
return listFlux;
}
/* Other stuff*/
}
с FileUtils , работающим следующим образом:
public class FilesUtils {
/* Declaration here */
/* Here we are using a CSV file but it will be connected to DB after*/
public List<InitialLine> readInitialLines() {
try {
if (CSVReader == null) initReader();
// What should I put here ?
// Read every line with .readNext() and stacking it inside a List<InitialLine> ?
String[] line = CSVReader.readNext();
if (line == null) return null;
return new LineFluxCapacity();
} catch (Exception e) {
logger.error("Error while reading line in file: " + this.fileName);
return null;
}
}
/* Other stuff here*/
}
Я думаю, что обычно чанки работают так:
- Reader: Read ONE item
- Процессор: преобразование ONE item в ONE item
- Writer: запись MULTIPLE элементов одновременно
Но можем ли мы реализовать что-то чистое, работая так:
- Считыватель: Чтение МНОЖЕСТВО Элемент / строка
- Процессор: Преобразование МНОЖЕСТВО Элемент / строка ONE line
- Writer: Запись ONE line