Spring集成 - SFTP文件同步 - 当文件名相同但时间戳不同时,不会生成消息

时间:2017-07-19 19:29:05

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

我已使用SftpInboundFileSynchronizingMessageSource配置了我的应用程序。每当找到新文件时(即新文件名和/或时间戳),我希望用文件作为结果有效载荷接收消息。这就是我所拥有的:

@Bean
public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
    SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(sftpSessionFactory());
    fileSynchronizer.setDeleteRemoteFiles(false);
    fileSynchronizer.setRemoteDirectory(applicationProperties.getSftpDirectory());
    CompositeFileListFilter<ChannelSftp.LsEntry> compositeFileListFilter = new CompositeFileListFilter<ChannelSftp.LsEntry>();
    compositeFileListFilter.addFilter(new SftpPersistentAcceptOnceFileListFilter(store, "sftp"));
    compositeFileListFilter.addFilter(new SftpSimplePatternFileListFilter(applicationProperties.getLoadFileNamePattern()));
    fileSynchronizer.setFilter(compositeFileListFilter);
    fileSynchronizer.setPreserveTimestamp(true);
    return fileSynchronizer;
}

@Bean
@InboundChannelAdapter(autoStartup="true", channel = "sftpChannel", poller = @Poller("pollerMetadata"))
public SftpInboundFileSynchronizingMessageSource sftpMessageSource() {
    SftpInboundFileSynchronizingMessageSource source =
            new SftpInboundFileSynchronizingMessageSource(sftpInboundFileSynchronizer());
    source.setLocalDirectory(applicationProperties.getScheduledLoadDirectory());
    source.setAutoCreateLocalDirectory(true);
    CompositeFileListFilter<File> compositeFileFilter = new CompositeFileListFilter<File>();
    compositeFileFilter.addFilter(new LastModifiedFileListFilter());
    compositeFileFilter.addFilter(new FileSystemPersistentAcceptOnceFileListFilter(store, "dailyfilesystem"));
    source.setLocalFilter(compositeFileFilter);
    source.setCountsEnabled(true);
    return source;
}

这种方法很有效,除了在后续轮询中我获得具有不同修改时间戳的相同文件名的情况。在这种情况下,我得到消息的null结果。如果时间戳不同但文件名相同,我如何确保生成消息?

1 个答案:

答案 0 :(得分:1)

看起来您现有的本地副本(旧版本)在下游的某个地方很忙。资源是开放的。因此适配器无法覆盖它。

最近已修复:https://jira.spring.io/browse/INT-4305