список имен файлов из каталога удаленного сервера - PullRequest
0 голосов
/ 23 января 2019

Я хочу рекурсивно перечислять файлы в удаленном каталоге и его подкаталогах.Я знаю, что это можно сделать, вызвав метод listFiles ListGateway следующим образом:

List list = listGateway.listFiles ("/ ussama / provider")

@MessagingGateway
public interface ListGateway {

    @Gateway(requestChannel = "listSftpChannel")
    List<File> listFiles(String dir);

}

@Bean
@ServiceActivator(inputChannel = "listSftpChannel")
public MessageHandler handler() {
    SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "ls", "'/directory'");
    return  sftpOutboundGateway;
}

@Bean
public IntegrationFlow sftpOutboundListFlow() {
    return IntegrationFlows.from("listSftpChannel")
            .handle(new SftpOutboundGateway(sftpSessionFactory(), "ls", "payload")
            ).get();
}

НоЯ хочу сделать это через каждые х минут.Есть ли способ я могу опрашивать удаленный каталог, чтобы список файлов через каждые х минут.Пожалуйста, дайте конфигурацию Java.

1 Ответ

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

Опрос простого источника сообщений POJO для каталога и настройте опрашивающий при необходимости ...

@Bean
public IntegrationFlow pollLs(SessionFactory<LsEntry> sessionFactory) {
    return IntegrationFlows.from(() -> "foo/bar", e -> e
                .poller(Pollers.fixedDelay(5, TimeUnit.SECONDS)))
            .handle(Sftp.outboundGateway(sessionFactory, Command.LS, "payload")
                    .options(Option.RECURSIVE))
            .handle(System.out::println)
            .get();
}

Очевидно, что для получения результата List<LsEntry> вам потребуется некоторая услуга в .handle.

Кстати, есть фабричный класс Sftp с удобными методами для создания конечных точек.

...