Spring Integration SFTP: Как возобновить частично загруженный большой файл (с ext .writing) с удаленного SFTP-сервера - PullRequest
0 голосов
/ 30 апреля 2020

Я использую Spring Boot и Spring Integration с SFTP. Моя цель - загрузить большие файлы (7 ГБ) с удаленного SFTP-сервера, но соединение плохое и часто отключается. После переподключения мне нужно продолжить (возобновить) загрузку существующего файла, потому что перезапуск занимает слишком много времени.

Возможно ли даже резюме ?

    @Bean
    public SessionFactory<LsEntry> sftpSessionFactory() {
        DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
        factory.setHost(host);
        factory.setPort(port);
        factory.setUser(username);
        factory.setPassword(password);
        factory.setAllowUnknownKeys(true);
        return new CachingSessionFactory<>(factory);
    }

    @Bean
    public SftpInboundFileSynchronizer sftpInboundFileSynchronizer() {
        SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(sftpSessionFactory());
        fileSynchronizer.setDeleteRemoteFiles(false);
        fileSynchronizer.setRemoteDirectory(remoteDir);
        fileSynchronizer.setFilter(new SftpSimplePatternFileListFilter(remoteFileFilter));
        return fileSynchronizer;
    }

    @Bean
    @InboundChannelAdapter(channel = "fromSftpChannel", poller = @Poller(fixedDelay = "5000"))
    public MessageSource<File> sftpMessageSource() {
        SftpInboundFileSynchronizingMessageSource source = new SftpInboundFileSynchronizingMessageSource(
                sftpInboundFileSynchronizer()
        );
        source.setLocalDirectory(new File(localDir));
        source.setAutoCreateLocalDirectory(true);
        source.setLocalFilter(new AcceptOnceFileListFilter<>());
        return source;
    }

    @Bean
    @ServiceActivator(inputChannel = "fromSftpChannel")
    public MessageHandler resultFileHandler() {
        return message -> System.err.println(message.getPayload());
    }
...