Какова лучшая производительность для чтения XML в Spring Batch? Каждый XML имеет размер приблизительно 300 КБ, и мы обрабатываем 1 миллион.
Наш текущий подход
30 разделов и 30 гридов, и каждый ведомый получает 166 XMLS
Commit Chunk 100
Память для запуска приложения составляет 8 ГБ
Использование JAXB в Rean Default Bean Scope
@StepScope
@Qualifier("xmlItemReader")
public IteratorItemReader<BaseDTO> xmlItemReader(
@Value("#{stepExecutionContext['fileName']}") List<String> fileNameList) throws Exception {
String readingFile = "File Not Found";
logger.info("----StaxEventItemReader----fileName--->" + fileNameList.toString());
List<BaseDTO> fileList = new ArrayList<BaseDTO>();
for (String filePath : fileNameList) {
try {
readingFile = filePath.trim();
Invoice bill = (Invoice) getUnMarshaller().unmarshal(new File(filePath));
UnifiedInvoiceDTO unifiedDTO = new UnifiedInvoiceDTO(bill, environment);
unifiedDTO.setFileName(filePath);
BaseDTO baseDTO = new BaseDTO();
baseDTO.setUnifiedDTO(unifiedDTO);
fileList.add(baseDTO);
} catch (Exception e) {
UnifiedInvoiceDTO unifiedDTO = new UnifiedInvoiceDTO();
unifiedDTO.setFileName(readingFile);
unifiedDTO.setErrorMessage(e);
BaseDTO baseDTO = new BaseDTO();
baseDTO.setUnifiedDTO(unifiedDTO);
fileList.add(baseDTO);
}
}
return new IteratorItemReader<>(fileList);
}
Наши вопросы:
- Правильна ли эта архитектура
- Есть ли какое-либо преимущество в производительности или архитектуре при использовании StaxEventItemReader и XStreamMarshaller по сравнению с JAXB.
- Как правильно обрабатывать память для избегать замедления