1

Я успешно настроил Spring с интеграцией SFTP и опросил SFTP-сервер и вытащил файлы.Spring integration SFTP - Обработка после передачи

Что я хотел бы знать, возможно ли, чтобы задание было запущено в каждом файле после его завершения? Я не хочу идти по дороге с файловыми часами - есть ли что-то для Spring SFTP для этого?

Рассмотрев документацию, похоже, что это может быть достигнуто с помощью Каналов.

Это то, что мой канал приемника в настоящее время выглядит следующим образом:

<int:channel id="receiveChannel"> 
    <int:queue /> 
</int:channel> 

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

Edit: от Spring Документах он говорит, что это:

Важно также понимать, что адаптер SFTP Inbound Channel является опрос потребителей и, следовательно, вы должны настроить Poller (либо глобальное значение по умолчанию или локальный суб-элемент). После того, как файл был перенесен в локальный каталог, сообщение с java.io.File как его тип полезной нагрузки будет сгенерировано и отправлено на канал, идентифицированный атрибутом канала.

Я не уверен, как это реализовать - и не может найти примеров.

ответ

0

В интересах других, которые сталкиваются с этим, проблема заключается в том, что сообщения помещаются на полученный канал только тогда, когда ВСЕ файлов были переданы. Они не обрабатываются по одному (как я и ожидал). В моем случае у меня есть тысячи больших файлов на удаленном SFTP-сервере, и только после того, как все они были загружены, были отправлены сообщения на канал получателя.

Я не уверен, если это по дизайну.

1

Похоже, вы должны начать с начала Enterprise Integration Patterns и сами определить, что channel является самым важным гражданином первого класса в интеграции.

Итак, у вас есть <int-sftp:inbound-channel-adapter>, что ответственность опроса лица из удаленного каталога, превратить их в java.io.File (как вы заметили, в RTFM) и отправить как payload из Message к настроенному каналу. Абонент для этого канала подберет сообщение и выполнит какой-то желаемый процесс под этим Filepayload.

См. Также Spring Integration Samples для получения дополнительной информации.

+0

Хм, я пробовал это в своем удаленном ответе, и я думал, что он работает. Однако события отправки являются единственными, которые запускаются, и только когда я перезапускаю приложение. –

+0

Пожалуйста, прочитайте больше документов и следуйте примерам. Вы видите события только на старте только потому, что во время работы приложения нет новых файлов в удаленном каталоге. Вы действительно должны сделать некоторый '', а не 'перехватчик'. Я не уверен, почему вы находите мой ответ недостоверным вопросом. Мы просто «говорим» на разных языках, и вы хотите, чтобы мы работали для вас в вашем приложении, когда достаточно читать некоторые документы и выполнять упражнение с соответствующим образцом. –

+0

Спасибо Артем - я переключился на сервисный активатор. Тем не менее, этот метод все еще запускается только при перезапуске системы.Из документов, которые я думал, что это сработает, когда файл завершит загрузку - извинения, я стараюсь следовать документам и не прошу сделать это для меня. –