У меня есть файлы местоположения ftp и есть локальная папка, в первый раз файлы копируются в локальные и при перезапуске сервера (в настоящее время он копирует уже скопированные файлы в локальную папку). не следует искать файлы, которые уже существуют в локальном, и он должен искать только новые файлы. Пожалуйста, дайте мне знать, можно ли достичь этого, используя Spring-Integration ftp? Я добавил фильтр также, но до сих пор он не работает, пожалуйста, дайте мне знать, где я неправильно,Spring Integration - FTP должен синхронизироваться с локальной папкой
@Bean
@InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000", maxMessagesPerPoll = "1"))
public MessageSource<?> receive() {
FtpInboundFileSynchronizingMessageSource messageSource = new FtpInboundFileSynchronizingMessageSource(synchronizer());
PropertiesPersistingMetadataStore metadataStore = new PropertiesPersistingMetadataStore();
FileSystemPersistentAcceptOnceFileListFilter acceptOnceFilter = new FileSystemPersistentAcceptOnceFileListFilter(metadataStore,"*.xml");
File Temp = new File(TEMP_FOLDER);
metadataStore.setBaseDirectory(TEMP_FOLDER);
messageSource.setLocalDirectory(Temp);
messageSource.setAutoCreateLocalDirectory(false);
messageSource.setLocalFilter(acceptOnceFilter);
return messageSource;
}
private AbstractInboundFileSynchronizer<FTPFile> synchronizer() {
folderCleanUp();
AbstractInboundFileSynchronizer<FTPFile> fileSynchronizer = new FtpInboundFileSynchronizer(sessionFactory());
fileSynchronizer.setRemoteDirectory(ftpFileLocation);
fileSynchronizer.setDeleteRemoteFiles(false);
Pattern pattern = Pattern.compile(".*\\.xml$");
FtpRegexPatternFileListFilter ftpRegexPatternFileListFilter = new FtpRegexPatternFileListFilter(pattern);
fileSynchronizer.setFilter(ftpRegexPatternFileListFilter);
return fileSynchronizer;
}
Независимо от фильтров файлы, которые уже находятся в локальном каталоге, не копируются повторно; см. [синхронизированный код здесь] (https://github.com/spring-projects/spring-integration/blob/master/spring-integration-file/src/main/java/org/springframework/integration/file/remote/ синхронизатор/AbstractInboundFileSynchronizer.java # L293). Локальный фильтр должен быть постоянным, чтобы предотвратить отправку сообщений для уже обработанных файлов после перезапуска. –
Спасибо Artem, я добавил указанный выше код фильтра , но все же он не работает, еще что-то еще нужно сделать – user3428736
Спасибо @GaryRussell, мне нужно скопировать тот же файл (уже скопированный в локальный файл), если есть данные, измененные и заменен на ftp, и если я попытаюсь перезапустить сервер, все будет скопировано на локальное. Вместо того, чтобы мне нужно скопировать только файл изменений и заменить локальный, даже без перезапуска сервера. Пожалуйста, дайте мне знать, что я должен делать. – user3428736