Обновление файла после FlatFileItemReader в Spring Batch

В настоящее время у меня есть следующая обработка в задании Spring Batch:

  • FlatFileItemReader читает файл CSV
  • Процессор делает некоторую работу
  • FlatFileItemWriter создает зеркало прочитанного файла, но обновляет файл, чтобы отразить обработку

Я не хочу писать в новый файл, но я хочу обновить тот же файл, который читается во время обработки.

Мой вопрос заключается в том, есть ли в Spring типичный метод использования FlatFileItemReader и последующего обновления этого же файла для каждой строки в процессоре во время выполнения?

Спасибо за любую помощь.

2 ответа

Вы всегда можете написать собственный писатель в весенней партии, как в примере ниже. Где вы читаете данные, формируете файл в память, а затем обновляете тот же файл данными, для которых вы предназначены.

https://github.com/pkainulainen/spring-batch-examples/tree/master/spring/src/main/java/net/petrikainulainen/springbatch/custom/in

более того, FlatFileItemReader не является потокобезопасным. Конечно, существуют хаки для обеспечения безопасности потоков, но не рекомендуется использовать такие хаки, всегда полезно создавать собственные программы записи.

Краткий ответ - нет, SB не позволяет перезаписывать тот же файл, с которого вы читаете.

Лучше всего написать промежуточный файл, а затем выполнить удаление / переименование.

Записать временный файл не так уж и плохо, особенно если вы работаете с огромным входным файлом, а OutOfMemoryException не за горами; также использование временного файла может сделать ваш шаг перезапускаемым и позволить вам вручную извлечь переведенный файл также в случае сбоя процесса удаления / переименования.

Другие вопросы по тегам