Spring SFTP опрашивает несколько каталогов с помощью шлюза исходящих сообщений и IntegrationFlow

#spring-integration #spring-integration-sftp

#пружинная интеграция #пружинная интеграция-sftp

Вопрос:

Я хочу периодически получать все файлы в определенном удаленном каталоге. Я могу получить файл в этом каталоге только один раз после запуска приложения. Не уверен, почему опросник не работает. Это зарегистрировано в проекте spring boot, и версия 2.2.1

 @InboundChannelAdapter(value = "sftpReportChannel",  poller = @Poller(fixedDelay = "5000"))  public String filesForGET(){  return "/etl/biq/autoscore/output/report-data/";  }    @Bean  public IntegrationFlow sftpGetFlow(SessionFactorylt;ChannelSftp.LsEntrygt; csf) {  return IntegrationFlows.from("sftpReportChannel")  .handle(Sftp.outboundGateway(csf,  AbstractRemoteFileOutboundGateway.Command.LS, "payload")  .options(AbstractRemoteFileOutboundGateway.Option.RECURSIVE, AbstractRemoteFileOutboundGateway.Option.NAME_ONLY)  //Persistent file list filter using the server's file timestamp to detect if we've already 'seen' this file.  .filter(new SftpPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "autoscore-meta-data")))  .split()  .log(message -gt; "file path -gt; " message.getPayload())  .handle(Sftp.outboundGateway(csf, AbstractRemoteFileOutboundGateway.Command.GET, "'/etl/biq/autoscore/output/report-data/'   payload")  .options(AbstractRemoteFileOutboundGateway.Option.STREAM))  .handle(new ReportHandler()) //get the payload and create email content and send eamil to recipients  .get();  }  

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

1. Вы уверены, что добавляете новые файлы в этот каталог во время выполнения? Ты сам это сказал SftpPersistentAcceptOnceFileListFilter . Таким образом, один и тот же файл из этого каталога не будет взят. Или вы можете изменить этот файл, и mtime удаленный файл должен быть изменен…

2. Спасибо за ваши комментарии. Отличные подсказки! Да, в этом-то и причина. Теперь он работает нормально. Еще раз спасибо, это спасло мне жизнь.

Ответ №1:

Это .filter(new SftpPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "autoscore-meta-data"))) позволяет ему работать так, чтобы он не получал один и тот же файл снова и снова при последующих действиях опроса.

Убедитесь, что вы добавляете новые файлы в этот удаленный каталог во время выполнения или изменяете уже обработанный файл. SftpPersistentAcceptOnceFileListFilter Логика основывается на mtime свойстве LsEntry определения того, что файл был изменен, поэтому он пригоден для повторной обработки.