首页 > 解决方案 > 从 ftp 读取大型 csv 文件时,Spring 集成堆空间错误

问题描述

从 ftp 读取大型 csv 文件时,我遇到了 spring 集成问题。csv 文件有 150 万行。

这是我的配置

  @Bean
  public IntegrationFlow automaticRouteFlow() {
    return p -> p
        .transform(unZipTransformer(), e -> e.advice())
        .split(new UnZipResultSplitter())
        .enrichHeaders(s -> s.headerExpressions(h -> h
            .put(FtpConstant.UNCOMPRESSED_DIR, "payload.getParentFile()")
            .put(FtpConstant.UNCOMPRESSED_FILE, "payload"))
            .header(FtpConstant.FAILED_PATH, failedDirectory)
        )
        .split(Files.splitter(true), e -> e.advice(fileHandlerAdvice()))
        .transform(o -> {
              try {
                return routeManagementTransformer.transform(o.toString());
              } catch (Exception e) {
                return new PollSkipAdvice();
              }
            }
        )
        .transform(Transformers.toJson())
        .filter(o -> !o.toString().equals("{}"))
        .channel(MessageChannels.queue())
        .handle(kafkaMessageHandler(kafkaTemplate, topic),
            e -> {
              e.poller(
                  Pollers.fixedDelay(queueFixDelay).maxMessagesPerPoll(queueMaxMessagesPerPoll));
              e.advice(directoryHandler());
            }
        );
  }

我设置了 5 个 queueMaxMessagesPerPoll ,并且我在 routeManagementTransformer.transform 中的每一行验证 null 和空数据,没有拉到数据库。它只是在每一行中验证不是 null 并且不是空白我的代码有什么问题吗?

标签: springspring-bootspring-integration

解决方案


推荐阅读