кто-нибудь сталкивался с этим? в основном я стремлюсь обработать файл один раз, даже если приложение отклонено
@Bean
public S3InboundFileSynchronizer s3InboundFileSynchronizer() throws Exception {
S3InboundFileSynchronizer synchronizer = new S3InboundFileSynchronizer(amazonS3());
synchronizer.setDeleteRemoteFiles(false);
synchronizer.setPreserveTimestamp(true);
synchronizer.setRemoteDirectory(sourceBucket + "/dir/");
synchronizer.setFilter(new S3PersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "simpleMetadataStore"));
return synchronizer;
}
private AmazonS3 amazonS3() throws Exception {
return clientFactory.getClient(AmazonS3.class);
}
@Bean
@InboundChannelAdapter(value = "s3FilesChannel", poller = @Poller(fixedDelay = "5000"))
public S3InboundFileSynchronizingMessageSource s3InboundFileSynchronizingMessageSource() throws Exception {
S3InboundFileSynchronizingMessageSource messageSource =
new S3InboundFileSynchronizingMessageSource(s3InboundFileSynchronizer());
messageSource.setAutoCreateLocalDirectory(true);
messageSource.setLocalDirectory(new File("c:/temp/"));
messageSource.setLocalFilter(new FileSystemPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "fsSimpleMetadataStore"));
return messageSource;
}
Ваша проблема в том, что вы используете SimpleMetadataStore в памяти, поэтому после перезапуска приложения вы теряете всю информацию, хранящуюся там.
Вместо этого рассмотрите возможность использования некоторой реализации постоянного хранилища, например для AWS у нас есть DynamoDbMetadataStore: https://github.com/spring-projects/spring-integration-aws#metadata-store-for-amazon-dynamodb
Да, PropertiesPersistingMetadataStore: docs.spring.io/spring-integration/docs/5.0.8.RELEASE/referen ce /…
Большой! Давайте тогда рассмотрим это: stackoverflow.com/help/someone-answers!
по-прежнему не работает с PropertiesPersistingMetadataStore, он выдает сообщение при запуске для уже загруженного файла, а также обнаруживает, что журналы "не были перенесены в существующий локальный файл 'c: \ temp \ a \ b \ file.xml' . Рассмотрите возможность удаления локального файла "
Вам нужно очистить этот локальный каталог
Перед запуском ваших тестов
Может быть, я неправильно понимаю, как это работает: для уже загруженной записи я не ожидаю появления какого-либо сообщения Итак, журнал имеет смысл, но почему он выдает сообщение, которого я не получаю Если я пойду и почищу локальный каталог, я ожидаю, что это чтобы загрузить файл снова и создать сообщение для следующего канала (что он и делает). Я что-то здесь упустил?
Если файл находится в локальном каталоге, то загруженная запись игнорируется, но для этой записи по-прежнему создается сообщение. Чтобы избежать этого, вам необходимо иметь упомянутый выше фильтр списка файлов.
есть ли какое-либо простое хранилище метаданных, использующее файловую систему для сохранения?