我使用Spring Integration编写FTP-Client以从远程FTP-Server获取文件。此服务必须下载大尺寸的文件,因此多次下载同一文件并不是最佳选择。
这是我的配置:
@Bean
open fun ftpSessionFactory() = DefaultFtpSessionFactory().apply {
setHost(env.getProperty(FTP_HOST))
setPort(env.getProperty(FTP_PORT)!!.toInt())
setUsername(env.getProperty(FTP_USER))
setPassword(env.getProperty(FTP_PASSWORD))
}
@Bean
open fun ftpInboundFileSynchronizer() = FtpInboundFileSynchronizer(
ftpSessionFactory()).apply {
setDeleteRemoteFiles(false)
setRemoteDirectory(env.getProperty(FTP_REMOTE_DIRECTORY))
setFilter(FtpSimplePatternFileListFilter(env.getProperty(FTP_FILTER)))
}
@Bean
@InboundChannelAdapter(channel = "ftpChannel")
open fun ftpMessageSource() = FtpInboundFileSynchronizingMessageSource(
ftpInboundFileSynchronizer()).apply {
setLocalDirectory(File(env.getProperty(FTP_LOCAL_DIRECTORY)))
setAutoCreateLocalDirectory(true)
setLocalFilter(AcceptOnceFileListFilter<File>())
maxFetchSize = 1
}
@Bean(name = [(PollerMetadata.DEFAULT_POLLER)])
open fun defaultPoller() = PollerMetadata().apply {
maxMessagesPerPoll = 1
}
我是否下载了与FTP_FILTER匹配的所有文件或刚刚更改了?
答案 0 :(得分:1)
除FtpSimplePatternFileListFilter
旁边还需要AcceptOnceFileListFilter
用于远程部分:https://docs.spring.io/spring-integration/docs/5.0.3.RELEASE/reference/html/ftp.html#ftp-inbound:
您还可以将基于模式的过滤器与其他过滤器(例如
AcceptOnceFileListFilter
)结合使用,以避免使用CompositeFileListFilter
来同步先前获取的文件。