我正在使用流动代码。远程目录有超过5000000个文件(我知道它是坏的)。我希望从那里只获取一个文件(myFile.txt)和相同的文件在非固定的时间间隔更新,然后我必须再次获取它。 Spring FTP集成工作就像魅力一样,但更新后传输myFile.txt大约需要10-12分钟。 myFile.txt不是一个大文件(大约800 KB)。看来Spring FTP API首先执行listFiles()然后过滤掉我的特定文件(可能是我错了)。由于文件FTP很慢,我的代码有什么问题吗?
@Bean
@Lazy(false)
public SessionFactory<FTPFile> ftpSessionFactory() {
DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory();
sf.setHost(server);
sf.setPort(port);
sf.setUsername(username);
sf.setPassword(password);
return new CachingSessionFactory<FTPFile>(sf);
}
@Bean
public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
FtpInboundFileSynchronizer fileSynchronizer = new FtpInboundFileSynchronizer(ftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setPreserveTimestamp(true);
fileSynchronizer.setRemoteDirectory(remoteDirectory);
fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("myFile.txt")));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(channel = "ftpChannel", poller = @Poller(fixedDelay = "10000}", maxMessagesPerPoll = "1") )
public MessageSource<File> ftpMessageSource() {
FtpInboundFileSynchronizingMessageSource source = new FtpInboundFileSynchronizingMessageSource(ftpInboundFileSynchronizer());
source.setLocalDirectory(new File(localFtpDirectory));
source.setAutoCreateLocalDirectory(true);
return source;
}
@Bean
@ServiceActivator(inputChannel = "ftpChannel")
public MessageHandler ftpHandler() {
return new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
LOG.info("File '{}' is ready for reading after FTP", message.getPayload());
}
};
}
答案 0 :(得分:1)
是的,它列出了所有文件;如果你使用出站网关获取你想要的单个文件,你可能会有更好的性能,而不是先将它们全部列出。