Как я могу синхронизировать каталог с подкаталогами по FTP, используя интеграцию Spring с Spring Batch? - PullRequest
0 голосов
/ 30 ноября 2018

Я пытался использовать SftpInboundFileSynchronizer с удаленным каталогом, который содержит подкаталог, скажем /myfiles/mysubdir/lefile.txt, я установил фильтр для захвата файлов внутри каталогов:

mysync.setRemoteDirectory("myfiles/");
mysync.setFilter(new SftpRegexPatternFileListFilter(".*\\.txt$"));

А затем SftpInboundFileSynchronizingMessageSource в качестве моего InboundChannelAdapter, который я установил на SftpInboundFileSynchronizingMessageSource a RecursiveDirectoryScanner в качестве сканера, и у меня нет установленного ограничения на глубину или количество файлов для извлечения.Я также установил FOLLOW_LINKS fileVisitOption на сканере для хорошей меры.

Я могу только извлекать файлы в локальный каталог по пути myfiles, но все, что глубже, не копируется в локальный каталог.Я не могу понять, если есть что-то, чем я не занимаюсь.

РЕДАКТИРОВАТЬ: Что будет содержать InboundChannelAdapter, если я только собираюсь отправить "/"как каталог для проверки с помощью mget -R?

@Bean
@InboundChannelAdapter(value = "sftpChannel", poller = @Poller(fixedDelay = "10"))
public MessageSource<?> myMessageSource() {
}

@Bean(name = "myGateway")
@ServiceActivator(inputChannel = "sftpChannel")
public MessageHandler handler() {
    SftpOutboundGateway gateway =
        new SftpOutboundGateway(sftpSessionFactory(), "mget", "'myfiles/*'");

    gateway.setOutputChannelName("listSplitter");
    gateway.setOptions("-R");
    gateway.setAutoCreateLocalDirectory(true);

    myLocalPath = Paths.get(myLocalParentDir).toRealPath().toString();

    gateway.setLocalDirectory(new File(myLocalPath));

    SftpRegexPatternFileListFilter regexFilter = new regexFilter("^.*\\.txt");
    regexFilter.setAlwaysAcceptDirectories(true);
    regexFilter.setFilter(sftpRegexPatternFileListFilter);

    return gateway;
}

1 Ответ

0 голосов
/ 30 ноября 2018

Рекурсия удаленной файловой системы не поддерживается входящим синхронизатором;используйте взамен SftpOutboundGateway (запрос / ответ) с рекурсивной командой mget.

По умолчанию файлы, существующие в локальном каталоге, не выбираются повторно;Вы можете контролировать это с помощью FileExistsMode.

...