spring -gration-aws - отключить синхронизацию из подпапок в корзине - PullRequest
0 голосов
/ 16 сентября 2018

Я использую Spring интеграции Aws в одном из моих проектов для загрузки файлов из корзины S3 в локальный каталог. Я указал местоположение корзины, и загрузка пока работает нормально. Проблема возникла, когда я создал подпапку в корзине, чтобы сохранить архивный файл (который был обработан / загружен). Синхронизатор S3 также начал загружать подпапку. Мои ожидания состоят в том, чтобы синхронизировать только папку вместо вложенных папок в корзине. Я вижу флаг в выпуске spring -gration-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?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Чтобы решить эту проблему, я обновил шаблон регулярных выражений, чтобы исключить файлы, содержащие путь к папке архива для S3RegexPatterenFileListFilter.Этот шаблон разрешает только файлы с расширениями txt csv, но не разрешает пути с именем моей архивной папки.

([^archive](\.(?i)(txt|csv))$)
0 голосов
/ 16 сентября 2018

Насколько я знаю, в протоколе AWS S3 нет нотации sub-folder: https://docs.aws.amazon.com/AmazonS3/latest/user-guide/using-folders.html.

Это искусственный подход к группированию объектов с одинаковым префиксом.

Когда мы получаем объект из S3, у нас есть его ключ. Таким образом, вы можете настроить S3RegexPatternFileListFilter, чтобы пропустить те объекты, где их ключи имеют имя вашей логической подпапки.

...