Обновление файла после FlatFileItemReader в Spring Batch
В настоящее время у меня есть следующая обработка в задании Spring Batch:
- FlatFileItemReader читает файл CSV
- Процессор делает некоторую работу
- FlatFileItemWriter создает зеркало прочитанного файла, но обновляет файл, чтобы отразить обработку
Я не хочу писать в новый файл, но я хочу обновить тот же файл, который читается во время обработки.
Мой вопрос заключается в том, есть ли в Spring типичный метод использования FlatFileItemReader и последующего обновления этого же файла для каждой строки в процессоре во время выполнения?
Спасибо за любую помощь.
2 ответа
Вы всегда можете написать собственный писатель в весенней партии, как в примере ниже. Где вы читаете данные, формируете файл в память, а затем обновляете тот же файл данными, для которых вы предназначены.
более того, FlatFileItemReader не является потокобезопасным. Конечно, существуют хаки для обеспечения безопасности потоков, но не рекомендуется использовать такие хаки, всегда полезно создавать собственные программы записи.
Краткий ответ - нет, SB не позволяет перезаписывать тот же файл, с которого вы читаете.
Лучше всего написать промежуточный файл, а затем выполнить удаление / переименование.
Записать временный файл не так уж и плохо, особенно если вы работаете с огромным входным файлом, а OutOfMemoryException не за горами; также использование временного файла может сделать ваш шаг перезапускаемым и позволить вам вручную извлечь переведенный файл также в случае сбоя процесса удаления / переименования.