Считая документы Spring SFTP (http://docs.spring.io/spring-integration/reference/html/sftp.html), не совсем ясно, возможно ли предотвратить перезагрузку успешно перенесенных файлов, которые впоследствии удаляются.Spring integration SFTP - не обновлять локально удаленные файлы
Передаваемые файлы являются большими и обрабатываются локальной задачей, а затем могут быть удалены.
Однако Spring SFTP подбирает то, что они были удалены (либо во время выполнения, либо перезагрузка), и перезагружают их.
Я уже пользуюсь SftpPersistentAcceptOnceFileListFilter
, чтобы пережить перезагрузку.
Вышеупомянутое обсуждение относится к фильтрации файлов перед их извлечением . После того, как файлы были восстановлены, дополнительный фильтр применяется к файлам в файловой системе. По умолчанию это a
AcceptOnceFileListFilter
, который, как обсуждалось, сохраняет состояние в памяти и не рассматривает измененное время файла. Если ваше приложение удаляет файлы после обработки, адаптер будет повторно обрабатывать файлы на диске по умолчанию после перезапуска приложения.Кроме того, если настроить фильтр, чтобы использовать FtpPersistentAcceptOnceFileListFilter, и удаленный файл временных меток изменения (в результате чего он будет повторно неправдоподобно), локальный фильтр по умолчанию будет не позволит этот новый файл, который будет обработан.
Используйте атрибут local-filter для настройки поведения локального фильтра файловой системы . Чтобы решить эти конкретные варианты использования, вы можете вместо этого использовать FileSystemPersistentAcceptOnceFileListFilter в качестве локального фильтра . Этот фильтр также сохраняет принятые имена файлов и измененную временную метку в экземпляре стратегии
MetadataStore
(раздел 9.5, «Магазин метаданных») и будет определять изменение в локальном файле измененное время.
Из этого места, где упоминаются удаленные локальные файлы, я не знаю, что я должен делать.
Вот моя соответствующая конфигурация:
<int-sftp:inbound-channel-adapter id="sftpInboundAdapter"
auto-startup="true" channel="receiveChannel" session-factory="sftpSessionFactory"
local-directory="file:local-dir" remote-directory="files"
auto-create-local-directory="true" delete-remote-files="false"
filter="compositeFilter">
<int:poller fixed-rate="1000" max-messages-per-poll="1" />
</int-sftp:inbound-channel-adapter>
<bean id="compositeFilter"
class="org.springframework.integration.file.filters.CompositeFileListFilter">
<constructor-arg>
<list>
<bean
class="org.springframework.integration.sftp.filters.SftpSimplePatternFileListFilter">
<constructor-arg value="*.zip" />
</bean>
<bean
class="org.springframework.integration.sftp.filters.SftpPersistentAcceptOnceFileListFilter">
<constructor-arg name="store" ref="metadataStore" />
<constructor-arg value="foo/bar" />
</bean>
</list>
</constructor-arg>
</bean>
Гэри, это временная метка на удаленном сайте? –
Да; удаленные и локальные фильтры независимы - если постоянный (удаленный) 'filter' обнаруживает файл, который еще не был загружен, или временная метка на удаленном сервере была изменена, она загружается, в противном случае она пропускается. Если вы используете Redis для своего хранилища метаданных, вы можете использовать 'redis-cli' и' monitor' для просмотра обновлений в реальном времени. –
Это имеет смысл, Гарри. Я обновил свой вопрос с помощью config - и дважды проверял, что файлы по-прежнему перезагружаются после локального удаления. –