Опрос S3 Bucket для файла с использованием интеграции Spring - PullRequest
0 голосов
/ 29 декабря 2018

Я работаю над проектом, в котором мне нужно опросить корзину S3 для файлов и загрузить ее в другую корзину S3.В качестве первого шага к его реализации я пытаюсь опросить корзину S3 на предмет новых созданных файлов и создать их в моем локальном каталоге с помощью Spring Integration.Чтобы добиться этого, я создал простое приложение с начальной загрузкой с maven с приведенной ниже конфигурацией опроса объектов, в то время как обрабатывает fileReading IntegrationFlow

@Configuration
@EnableIntegration
@IntegrationComponentScan
@EnableAsync
public class ObjectPollerConfiguration {
    @Value("${amazonProperties.bucketName}")
    private String bucketName;
    public static final String OUTPUT_DIR2 = "target2";
    @Autowired
    private AmazonClient amazonClient;
    @Bean
    public S3InboundFileSynchronizer s3InboundFileSynchronizer() {
        S3InboundFileSynchronizer synchronizer = new S3InboundFileSynchronizer(amazonClient.getS3Client());
        synchronizer.setDeleteRemoteFiles(true);
        synchronizer.setPreserveTimestamp(true);
        synchronizer.setRemoteDirectory(bucketName);            
        return synchronizer;
    }
    @Bean
    @InboundChannelAdapter(value = "s3FilesChannel", poller = @Poller(fixedDelay = "30"))
    public S3InboundFileSynchronizingMessageSource s3InboundFileSynchronizingMessageSource() {
        S3InboundFileSynchronizingMessageSource messageSource =
                new S3InboundFileSynchronizingMessageSource(s3InboundFileSynchronizer());
        messageSource.setAutoCreateLocalDirectory(true);
        messageSource.setLocalDirectory(new File("."));
        messageSource.setLocalFilter(new AcceptOnceFileListFilter<File>());
        return messageSource;
    }
    @Bean
    public PollableChannel s3FilesChannel() {
        return new QueueChannel();
    }
    @Bean
    IntegrationFlow fileReadingFlow() {
        return IntegrationFlows
                .from(s3InboundFileSynchronizingMessageSource(),
                        e -> e.poller(p -> p.fixedDelay(30, TimeUnit.SECONDS)))
                .handle(fileProcessor())
                .get();
    }
    @Bean
    public MessageHandler fileProcessor() {
        FileWritingMessageHandler handler = new FileWritingMessageHandler(new File(OUTPUT_DIR2));
        handler.setExpectReply(false); // end of pipeline, reply not needed
        return handler;
    }
}*

Но когда я запускаю свое приложение как java-приложение и загружаю файлы в S3,Я не вижу каталог target2 с файлом и не получаю никаких журналов, соответствующих выполнению опроса.Может кто-нибудь помочь мне заставить его работать?

1 Ответ

0 голосов
/ 02 января 2019

Я думаю, что проблема в том, что вы не используете ваше свойство OUTPUT_DIR2 для локального каталога, в который нужно нажать.

Ваш код для локального каталога выглядит следующим образом:

messageSource.setLocalDirectory(new File("."));

Thisполностью не то, что вы ищете.Попробуйте поменять его на

messageSource.setLocalDirectory(new File(OUTPUT_DIR2));
...