我如何使用 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
我已经在 SftpInboundFileSynchronizingMessageSource
和 RecursiveDirectoryScanner
上设置了扫描仪,并且我对要检索的文件的深度或数量没有设置限制。我还在扫描仪上设置了 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
.
来控制它
我一直在尝试将 SftpInboundFileSynchronizer
与包含子目录的远程目录一起使用,比如说 /myfiles/mysubdir/lefile.txt,我已经设置了一个过滤器来抓取目录中的文件:
mysync.setRemoteDirectory("myfiles/");
mysync.setFilter(new SftpRegexPatternFileListFilter(".*\.txt$"));
然后 SftpInboundFileSynchronizingMessageSource
作为我的 InboundChannelAdapter
我已经在 SftpInboundFileSynchronizingMessageSource
和 RecursiveDirectoryScanner
上设置了扫描仪,并且我对要检索的文件的深度或数量没有设置限制。我还在扫描仪上设置了 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
.