我配置了以下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)。然后它将尝试在远程服务器上移动文件(已经完成),但是如果失败,它将从移动的文件夹中删除该文件。
答案 0 :(得分:1)
我发现了问题。我需要将SftpInboundFileSynchronizer
配置为使用与InboundChannelAdapter
相同的元数据存储。
fileSynchronizer.setFilter(SftpPersistentAcceptOnceFileListFilter(metadataStore, "devices"))
我在需要的地方将以下bean创建为autowired
。
@Bean
fun metaDataStore(): PropertiesPersistingMetadataStore {
val metadataStore = PropertiesPersistingMetadataStore()
metadataStore.setBaseDirectory(metadataStoreDirectory)
return metadataStore
}
一切正常,并且删除文件的其他问题不再发生。同样,本地文件也不会得到再次处理。