Я пытаюсь использовать S3InboundFileSynchronizer для синхронизации S3Bucket с локальным каталогом. Ковш организован с подкаталогами, такие как:Как использовать S3InboundFileSynchronizer для синхронизации S3Bucket, организованного с каталогами?
bucket -> 2016 -> 08 -> daily-report-20160801.csv daily-report-20160802.csv
и т.д ...
Используя эту конфигурацию:
@Bean
public S3InboundFileSynchronizer s3InboundFileSynchronizer() {
S3InboundFileSynchronizer synchronizer = new S3InboundFileSynchronizer(amazonS3());
synchronizer.setDeleteRemoteFiles(true);
synchronizer.setPreserveTimestamp(true);
synchronizer.setRemoteDirectory("REDACTED");
synchronizer.setFilter(new S3RegexPatternFileListFilter(".*\\.csv$"));
Expression expression = PARSER.parseExpression("#this.substring(#this.lastIndexOf('/')+1)");
synchronizer.setLocalFilenameGeneratorExpression(expression);
return synchronizer;
}
Я могу получить как подключение к ковшу и перечисляя его содержание. Когда приходит время, чтобы читать из ведра следующее исключение:
org.springframework.messaging.MessagingException: Problem occurred while synchronizing remote to local directory; nested exception is
org.springframework.messaging.MessagingException: Failed to execute on session;
nested exception is
java.lang.IllegalStateException: 'path' must in pattern [BUCKET/KEY].
at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.synchronizeToLocalDirectory(AbstractInboundFileSynchronizer.java:266)
Просмотр кода, кажется, что было бы невозможно когда-либо синхронизировать S3Bucket ж/подкаталогов:
private String[] splitPathToBucketAndKey(String path) {
Assert.hasText(path, "'path' must not be empty String.");
String[] bucketKey = path.split("/");
Assert.state(bucketKey.length == 2, "'path' must in pattern [BUCKET/KEY].");
Assert.state(bucketKey[0].length() >= 3, "S3 bucket name must be at least 3 characters long.");
bucketKey[0] = resolveBucket(bucketKey[0]);
return bucketKey;
}
Есть ли какая-то конфигурация, которую мне не хватает или это ошибка?
(я предполагаю, что это ошибка «, пока я сказал иначе, поэтому я представил pull request с предложенным исправлением.)
ОК. Поскольку вы даже подняли вопрос SO, я переключусь на вашу проблему :-) –