1

我正在使用Spring云流来读取文件并使用文件分割器进行分割,并使用DSL样式将每行作为消息发出,正在读取的文件有一个标题行,只是想知道是否有一种简单的方法可以跳过标题行读/读之前/之后。如何使用DSL跳过springcloudstream文件的标题行(第一行)?

任何帮助表示赞赏。

这里是我的分配器和integrationFlow的样子:

enter code here 
    return IntegrationFlows 
      .from("....") 
      .split(Files.splitter(true, true)/ 
      .charset(StandardCharsets.UTF_8) 
      .applySequence(true), //emmit sequenceNumber to header 
      e -> e.id("fileSplitter") 
      ); 


enter code here 
    IntegrationFlow integrationFlow = integrationFlowBuilder 
      .<Object, Class<?>>route(Object::getClass, m -> m 
        .channelMapping(FileSplitter.FileMarker.class, "markers.input") 
        .channelMapping(String.class, "lines.input")) 
      .get(); 

回答

1

如果我读您正在使用我们的OOB应用程序之一,文件源这一权利:https://github.com/spring-cloud-stream-app-starters/file/blob/master/spring-cloud-starter-stream-source-file/README.adoc和部署使用Spring云数据流的DSL等stream create file ----file.consumer.mode=lines --file.directory=/tmp/ | sink正确?

如果是这样,当您在线条模式下阅读文件时,会出现一个名为sequence_number的特殊标题。您可以在两者之间添加一个过滤器,以根据标头表达式删除这些消息。

+0

感谢您的回应..我不使用DataFlow,但单独的源和汇过程应用程序..这里是如何分配器看起来像 .from(s - > s.file(新文件(fileDir)) 。 filter(getFileFilter(fileName)), e - > e.poller(poller)) .split(Files.splitter(true,true) .charset(StandardCharsets.UTF_8) .applySequence(true),// emmit sequenceNumber到头文件 e - > e.id(“fileSplitter”)...和 –

+0

通道映射如下所示: > route(Object :: getClass,m - > m .channelMapping(FileSplitter .FileMarker.class,“ marker.input“) .channelMapping(String.class,”skus.input“)) .get(); –

+0

这是不可读的。考虑用代码编辑你的问题。但答案是正确的:您真的只需要使用过滤器跳过该行。 –