spring-integration-aws-禁用存储桶中子文件夹的同步

时间:2018-09-15 22:29:26

标签: spring spring-integration spring-integration-aws

我在我的一个项目中使用Spring Integration Aws将文件从S3存储桶下载到本地目录。我已经指定了存储桶的位置,并且到目前为止下载工作正常。当我在存储桶中创建一个子文件夹以保留存档文件(已处理/下载)时,发生了问题。 S3同步器也开始下载子文件夹。我的期望是仅同步文件夹,而不同步存储桶中的子文件夹。我可以在spring-integration-aws 0.5版本中看到一个标志来禁用此行为。

  

<xsd:attribute name="accept-sub-folders" type="xsd:string">

但是我无法在2.00版中找到它。

下面是代码:

@Bean
public S3InboundFileSynchronizer s3InboundFileSynchronizer ()
{
    S3InboundFileSynchronizer s3InboundFileSynchronizer = new S3InboundFileSynchronizer (amazonS3);
    s3InboundFileSynchronizer.setDeleteRemoteFiles (false);
    s3InboundFileSynchronizer.setPreserveTimestamp (true);
    s3InboundFileSynchronizer.setRemoteDirectory (remoteBucket);
    ChainFileListFilter fileListFilter = new ChainFileListFilter ();
    fileListFilter.addFilter (new S3RegexPatternFileListFilter (remoteFilesExtension));
    fileListFilter.addFilter (new S3PersistentAcceptOnceFileListFilter (metadataStore (), metadataStoreKeyPrefix));
    return s3InboundFileSynchronizer;
}

和轮询器配置:

@Bean
@InboundChannelAdapter(channel = "fileArchiveChannel", poller = @Poller(fixedRate = "100000", maxMessagesPerPoll = "-1"))
public S3InboundFileSynchronizingMessageSource s3InboundFileSynchronizingMessageSource ()
{
    S3InboundFileSynchronizingMessageSource messageSource = new S3InboundFileSynchronizingMessageSource (s3InboundFileSynchronizer ());
    messageSource.setAutoCreateLocalDirectory (true);
    messageSource.setLoggingEnabled (true);
    File location = new File (localDirectory);
    Assert.notNull (location, "Local directory is not available");
    messageSource.setLocalDirectory (location);

    ChainFileListFilter fileListFilter = new ChainFileListFilter ();
    fileListFilter.addFilter (new RegexPatternFileListFilter (remoteFilesExtension));
    fileListFilter.addFilter (new FileSystemPersistentAcceptOnceFileListFilter (metadataStore (), metadataStoreKeyPrefix));
    messageSource.setLocalFilter (fileListFilter);

    return messageSource;
}

以哪种方式停止与Spring Integration AWS 2.00同步子文件夹?

2 个答案:

答案 0 :(得分:0)

据我所知,AWS S3协议中没有sub-folder表示法:https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html

这是一种对具有相同前缀的对象进行分组的人工方法。

当我们从S3获取对象时,便有了它的密钥。因此,您可以配置S3RegexPatternFileListFilter来跳过那些键具有您的逻辑子文件夹名称的对象。

答案 1 :(得分:0)

为解决此问题,我更新了正则表达式模式以排除包含S3RegexPatterenFileListFilter的存档文件夹路径的文件。此模式仅允许带有txt csv扩展名的文件,但不允许带有我的存档文件夹名称的路径。

([^archive](\.(?i)(txt|csv))$)