Spring集成:只从FTP服务器下载新的或更新的文件?

时间:2018-04-04 08:01:30

标签: java spring kotlin spring-integration

我使用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匹配的所有文件或刚刚更改了?

1 个答案:

答案 0 :(得分:1)

FtpSimplePatternFileListFilter旁边还需要AcceptOnceFileListFilter用于远程部分:https://docs.spring.io/spring-integration/docs/5.0.3.RELEASE/reference/html/ftp.html#ftp-inbound

  

您还可以将基于模式的过滤器与其他过滤器(例如AcceptOnceFileListFilter)结合使用,以避免使用CompositeFileListFilter来同步先前获取的文件。