Как можно упростить обработку данных в sftp в программе записи пакетов spring

#spring-batch #spring-integration

Вопрос:

У меня есть следующая проблема для реализации в качестве пакетного приложения spring.

  1. Запрашивать данные у внешней конечной точки
  2. Применить бизнес-логику (сопоставление)
  3. Запись в csv-файл
  4. Загрузите эти файлы на sftp-сервер

Я ожидал значительного объема прочитанных данных. Невозможно сохранить все это в памяти. Мой вопрос в том, могу ли и как я могу объединить шаги 3 и 4 в один. И самое главное, как можно оптимизировать передачу данных непосредственно на sftp-сервер.

Ответ №1:

Адаптер исходящего канала SFTP поддерживает полезную нагрузку в качестве InputStream . Итак, вы можете передавать данные по этому потоку: https://docs.spring.io/spring-integration/docs/current/reference/html/sftp.html#sftp-outbound.

Вы можете использовать RemoteFileTemplate или SftpSession напрямую, хотя и в весенней партии ItemWriter .

Комментарии:

1. Да, я сделал это, и это отлично работает. Но теперь я хотел бы переместить файл из временной папки на sftp в каталог назначения после завершения процесса загрузки. Но, как я выяснил, RemoteFileTemplate не хватает такой функциональности. Вероятно, я должен использовать IntegrationFlow ? Есть ли простой способ сделать это ?

2. Это почему? Есть rename(String fromPath, String toPath) контракт. Не может ли он на самом деле переименовать ваш удаленный каталог tmp в реальный?

3. Я попробую это сделать. Спасибо. Возможно, имя сбило меня с толку :/