春季集成-SFTP FileSystemPersistentAcceptOnceFileListFilter未创建元数据存储文件

时间:2019-03-04 00:20:58

标签: spring spring-integration spring-integration-sftp

我配置了以下InboundChannelAdapter

@Bean
@InboundChannelAdapter(channel = "inbound", poller = [Poller(cron = "0/5 * * * * *")])
fun sftpHualingMessageSource(): MessageSource<File> {
    val metadataStore = PropertiesPersistingMetadataStore()
    metadataStore.setBaseDirectory(metadataStoreDirectory)

    val source = SftpInboundFileSynchronizingMessageSource(sftpInboundHualingFileSynchronizer())
    source.setLocalDirectory(File(sftpLocalDirectoryHualingDownload))
    source.setAutoCreateLocalDirectory(true)
    source.setLocalFilter(FileSystemPersistentAcceptOnceFileListFilter(metadataStore, "devices"))

    return source
}

但是,metadata-store.properties文件并未创建。

我还看到了我认为与之相关的奇怪行为。当spring-boot服务器重启时,它将再次处理文件的本地副本(csv)。然后它将尝试在远程服务器上移动文件(已经完成),但是如果失败,它将从移动的文件夹中删除该文件。

1 个答案:

答案 0 :(得分:1)

我发现了问题。我需要将SftpInboundFileSynchronizer配置为使用与InboundChannelAdapter相同的元数据存储。

fileSynchronizer.setFilter(SftpPersistentAcceptOnceFileListFilter(metadataStore, "devices"))

我在需要的地方将以下bean创建为autowired

@Bean
fun metaDataStore(): PropertiesPersistingMetadataStore {
    val metadataStore = PropertiesPersistingMetadataStore()
    metadataStore.setBaseDirectory(metadataStoreDirectory)
    return metadataStore
}

一切正常,并且删除文件的其他问题不再发生。同样,本地文件也不会得到再次处理。