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

這是不可讀的。考慮用代碼編輯你的問題。但答案是正確的:您真的只需要使用過濾器跳過該行。 –