Как удалить файл из локального каталога после перехода в GCP Storage с помощью Spring Integration - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть этот код, и он успешно перемещает файлы из локального каталога в корзину GCP Storage, когда они помещаются туда, но мне нужно удалить их после перехода в GCP.

@Bean
@InboundChannelAdapter(channel = "new-file-channel", poller = @Poller(fixedDelay = "5000"))
public MessageSource<File> streamingAdapter(Storage gcs) {
    FileReadingMessageSource sourceReader = new FileReadingMessageSource();
    sourceReader.setDirectory(new File(INPUT_DIR));
    sourceReader.setFilter(new SimplePatternFileListFilter(FILE_PATTERN));
    return sourceReader;
}

@Bean
@ServiceActivator(inputChannel = "new-file-channel")
public MessageHandler outboundChannelAdapter(Storage gcs) {
    GcsMessageHandler outboundChannelAdapter = new GcsMessageHandler(new GcsSessionFactory(gcs));
    outboundChannelAdapter.setRemoteDirectoryExpression(new ValueExpression<>(this.gcsReadBucket));
    return outboundChannelAdapter;
}

1 Ответ

0 голосов
/ 29 ноября 2018

Вам необходимо добавить к этому @ServiceActivator(inputChannel = "new-file-channel") adviceChain ссылку на ExpressionEvaluatingRequestHandlerAdvice, которая выполнит onSuccessExpression для удаления этого локального файла.

Примерно так:

    @Bean
    public Advice removeFileAdvice() {
        ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
        advice.setOnSuccessExpressionString("payload.delete()");
        advice.setSuccessChannel(myHandlerSuccessChannel());
        return advice;
    }

Это сработает, потому что ваша полезная нагрузка - java.io.File, и у нее есть метод delete().

Чем вы настраиваете, как я сказал в начале:

@ServiceActivator(inputChannel = "new-file-channel", adviceChain="removeFileAdvice")
...