spring-integration-aws - 禁止从存储桶中的子文件夹同步
spring-integration-aws - disable sync from sub folders in bucket
我在我的一个项目中使用 Spring 集成 Aws 将文件从 S3 存储桶下载到本地目录。我已经指定了存储桶位置,目前下载工作正常。当我在存储桶中创建一个子文件夹来保存存档文件(已 processed/downloaded)时,出现了这个问题。 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 集成 aws 2.00 同步?
据我所知,AWS S3 协议中没有 sub-folder
表示法:https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html.
这是对具有相同前缀的对象进行分组的人为方法。
当我们从 S3 获取一个对象时,我们就有了它的键。因此,您可以配置 S3RegexPatternFileListFilter
以跳过其键具有您的逻辑子文件夹名称的那些对象。
为了解决这个问题,我更新了正则表达式模式以排除包含 S3RegexPatterenFileListFilter 存档文件夹路径的文件。此模式只允许带有 txt csv 扩展名的文件,但不允许带有我的存档文件夹名称的路径。
([^archive](\.(?i)(txt|csv))$)
我在我的一个项目中使用 Spring 集成 Aws 将文件从 S3 存储桶下载到本地目录。我已经指定了存储桶位置,目前下载工作正常。当我在存储桶中创建一个子文件夹来保存存档文件(已 processed/downloaded)时,出现了这个问题。 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 集成 aws 2.00 同步?
据我所知,AWS S3 协议中没有 sub-folder
表示法:https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html.
这是对具有相同前缀的对象进行分组的人为方法。
当我们从 S3 获取一个对象时,我们就有了它的键。因此,您可以配置 S3RegexPatternFileListFilter
以跳过其键具有您的逻辑子文件夹名称的那些对象。
为了解决这个问题,我更新了正则表达式模式以排除包含 S3RegexPatterenFileListFilter 存档文件夹路径的文件。此模式只允许带有 txt csv 扩展名的文件,但不允许带有我的存档文件夹名称的路径。
([^archive](\.(?i)(txt|csv))$)