我如何使用 spring 与 spring 批处理的集成来同步目录与 ftp 上的子目录?

how can i synchronize a directory with subdirectories over ftp using spring integration with spring batch?

我一直在尝试将 SftpInboundFileSynchronizer 与包含子目录的远程目录一起使用,比如说 /myfiles/mysubdir/lefile.txt,我已经设置了一个过滤器来抓取目录中的文件:

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

然后 SftpInboundFileSynchronizingMessageSource 作为我的 InboundChannelAdapter 我已经在 SftpInboundFileSynchronizingMessageSourceRecursiveDirectoryScanner 上设置了扫描仪,并且我对要检索的文件的深度或数量没有设置限制。我还在扫描仪上设置了 FOLLOW_LINKS fileVisitOption 以备不时之需。

我只能从 myfiles 路径将文件拉入本地目录,但更深层次的内容不会复制到本地目录。 我这辈子都弄不明白是否有什么事情是我没有做的。

编辑: 如果我只发送“/”作为目录以使用 mget -R 检查,InboundChannelAdapter 将包含什么?

@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;
}

入站同步器不支持远程文件系统的递归;使用递归 mget 命令代替 SftpOutboundGateway (request/reply)。

默认不重新抓取本地目录下的文件;您可以使用 FileExistsMode.

来控制它