Spring Batch Лучшая архитектура для чтения XML - PullRequest
0 голосов
/ 02 мая 2020

Какова лучшая производительность для чтения XML в Spring Batch? Каждый XML имеет размер приблизительно 300 КБ, и мы обрабатываем 1 миллион.

Наш текущий подход

  1. 30 разделов и 30 гридов, и каждый ведомый получает 166 XMLS

  2. Commit Chunk 100

  3. Память для запуска приложения составляет 8 ГБ

  4. Использование 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);
}

Наши вопросы:

  1. Правильна ли эта архитектура
  2. Есть ли какое-либо преимущество в производительности или архитектуре при использовании StaxEventItemReader и XStreamMarshaller по сравнению с JAXB.
  3. Как правильно обрабатывать память для избегать замедления
...