1

我有一个配置类,它不断地轮询我的 FTP 目录。奇怪的行为是 SftpPersistentAcceptOnceFileListFilter 立即将文件保存在元数据存储表中,但不会立即被作业启动器拾取以进行处理。我必须手动从元数据存储表中删除该条目 3-4 次,然后文件被拾取。是代码问题还是 FTP 服务器问题?想不通。。

知道我是否遗漏了什么?

@Bean
public IntegrationFlow sftpInboundNocFlow(FileNocMessageToJobRequest fileNocMessageToJobRequest) throws Exception {
    return IntegrationFlows
            .from(s -> s.sftp(this.sftpConfig.sftpSessionFactory())
                            .filter(this.sftpPersistantNocFilter())
                            .preserveTimestamp(true)
                            .remoteDirectory(this.sftpProperties.getRemoteOutboundDirectoryNoc())
                            .deleteRemoteFiles(this.sftpProperties.isDeleteRemoteFilesEnabled())
                            .autoCreateLocalDirectory(true)
                            .localDirectory(new File(FileUtils.getTempDirectoryPath() + this.sftpProperties.getLocalInboundDirectoryNoc())),
                            e -> e.id("sftpInboundNocAdapter")
                            .autoStartup(true)
                            .poller(Pollers.fixedDelay(9000)))
            .handle(fileNocMessageToJobRequest)
            .handle(this.jobNocLaunchingGateway())
            .log(LoggingHandler.Level.WARN, ">>>>>>>>>>headers.id + ': ' + payload")
            .channel("nullChannel")
            .get();
}



@Bean
public CompositeFileListFilter sftpPersistantNocFilter() {
    log.info("sftpPersistantNocFilter is called");
    CompositeFileListFilter nocfilters = new CompositeFileListFilter();
    nocfilters.addFilter(new SftpPersistentAcceptOnceFileListFilter(this.metadataStore(),"Downloaded_File:"));
    nocfilters.addFilter(new SftpRegexPatternFileListFilter(".*\\bNOC\\b.*"));
   // nocfilters.addFilter(new SftpSimplePatternFileListFilter("*.csv"));
    return nocfilters;
}
4

1 回答 1

0

显然,文件已经存储在本地目录和这些本地文件的内存元数据存储中。您应该考虑更改 a local-filter

您可以使用 local-filter 属性来配置本地文件系统过滤器的行为。从版本 4.3.8 开始,默认配置 FileSystemPersistentAcceptOnceFileListFilter。此过滤器将接受的文件名和修改的时间戳存储在 MetadataStore 策略的实例中(请参阅元数据存储),并检测本地文件修改时间的更改。默认的 MetadataStore 是一个 SimpleMetadataStore,它将状态存储在内存中。

有关更多信息,请参阅文档:https ://docs.spring.io/spring-integration/docs/5.2.0.RELEASE/reference/html/sftp.html#sftp

于 2019-10-07T12:39:23.083 回答