将大量文件加载到 SFTP 问题

Loading big amount of files to SFTP issue

我有 Spring 集成 sftp 配置

@Bean
  public SessionFactory<ChannelSftp.LsEntry> sftpSessionFactory() {
    final DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(false);
    factory.setHost(properties.getHost());
    factory.setPort(properties.getPort());
    factory.setUser(properties.getUser());
    factory.setPassword(properties.getPassword());
    factory.setAllowUnknownKeys(true);

    return factory;

  @Bean
  @ServiceActivator(inputChannel = "toSftpChannel")
  public MessageHandler handler(@Value("${sftp.folder}") final String remoteDirectory) {
    final SftpMessageHandler handler = new SftpMessageHandler(sftpSessionFactory());
    handler.setRemoteDirectoryExpressionString(remoteDirectory);
    handler.setAutoCreateDirectory(true);
    return handler;
  }

而且我需要将 10-20 xml 个文件上传到 SFTP,(每个文件大小约为 150MB)

主要问题是我收到 SftpException。 InputStream 关​​闭或 Socket 异常。 我不能使用 Cashed session,因为客户对此有限制。

另外,我用并行流放置文件

Arrays.stream(files)
    .parallel()
    .forEach(sftpService::uploadFile);

那么,将所有文件上传到 sftp 最安全的方法是什么。

通过删除并行流并为每次上传打开每个会话来解决