【发布时间】:2020-05-28 19:41:41
【问题描述】:
据此 doc 找不到从远程 SFTP 重新下载本地删除文件的正确进程。
要求是,删除已经从远程 SFTP 获取的本地文件,并在需要时使用 sftp-inbound-adapter (DSL configuration) 重新获取相同的文件。在这个实现中,MetadataStore 没有被持久化到任何外部系统,如 PropertiesPersistingMetadataStore 或 Redis 元数据存储。所以根据 doc,MetadataStore 存储在 In-Memory 中。
找不到任何方法从MetadataStore 中删除该远程文件的元数据,以便使用file_name 重新获取本地删除的文件。而且一点头绪都没有,这个removeRemoteFileMetadata()回调需要怎么实现(according to this doc)。
配置类包含以下内容:
@Bean
public IntegrationFlow fileFlow() {
SftpInboundChannelAdapterSpec spec = Sftp.inboundAdapter(sftpConfig.getSftpSessionFactory())
.preserveTimestamp(true)
.patternFilter(Constants.FILE_NAME_CONVENTION)
.remoteDirectory(sftpConfig.getSourceLocation())
.autoCreateLocalDirectory(true)
.deleteRemoteFiles(false)
.localDirectory(new File(sftpConfig.getDestinationLocation()));
return IntegrationFlows
.from(spec, e -> e.id("sftpInboundAdapter").autoStartup(false)
.poller(Pollers.fixedDelay(5000).get()))
.channel(MessageChannels.direct().get())
.handle(message -> {
log.info("Fetching File : " + message.getHeaders().get("file_name").toString());
})
.get();
}
【问题讨论】:
标签: java spring spring-integration spring-integration-sftp