Проблемы с извлечением большого файла из SFTP и хранением в Postgresql с использованием Spring и Hibernate - PullRequest
1 голос
/ 15 мая 2019

У меня есть конвейер интеграции Spring, который извлекает документ с SFTP-сервера и сохраняет его в базе данных Postgresql (выполняется Spring data / hibernate).После успешного конвейера выборки sftp получите fileName и контент (как byte []) и сохраните его в базе данных.

У меня есть 2 основные проблемы:

  1. Проблема заключается в том, что я не ожидал, что клиент загрузит файлы ZIP размером 100–200 МБ, которые конвейерный файл читает, но не удается сохранить.

  2. Иногда (НЕ ВСЕГДА) «java.lang.OutOfMemoryError: выбрано пространство кучи Java», но увеличение памяти кучи временно разрешено, что, возможно, существует решение, которое делаетне требуется загружать все содержимое файла в память перед сохранением в базе данных?

Только сообщение журнала, которое регистрируется во время транзакции:

"thread":"task-scheduler-8","location":"org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.copyFileToLocalDirectory(AbstractInboundFileSynchronizer.java:430)","level":"WARN","message":"The remote file '-r-x------ 1 0        0           81062125 May 15 15:06 test.zip' has not been transferred to the existing local file './transfered-files/test.zip'. Consider removing the local file."}

Я понимаю, что должен поделитьсякод, но на самом деле не может (правовые вопросы).

1 Ответ

1 голос
/ 15 мая 2019

Рекомендуется использовать SftpStreamingMessageSource вместо копирования / вставки в локальной файловой системе: https://docs.spring.io/spring-integration/docs/current/reference/html/#sftp-streaming

...