簡體   English   中英

Spring 批量過濾數據里面的item reader

[英]Spring batch filtering data inside item reader

我正在寫一個讀取日志文件的批處理,它應該采用多種類型(日志日志文件的格式),然后我想根據日志文件中的某些字符讀取每個文件,例如

15:31:44,437 INFO <NioProcessor-32> Send to <SLE- 15:31:44,437 INFO <NioProcessor-32> [{2704=5, 604=1, {0=023pdu88mW00007z}] 15:31:44,437 DEBUG <NioProcessor-32> SCRecord 2944

在這樣的日志文件中,我只想讀取包含“[{}]”的日志行,而忽略所有其他日志行。 我試圖在項目閱讀器中閱讀它並將其拆分為 object 但我不知道如何。 我認為我應該創建一個自定義項目閱讀器或類似的東西; 我的日志 class 看起來太簡單了:

公共 class logLine {

字符串編號順序;

字符串時間;

字符串標簽;

}

我的項目閱讀器看起來像:

public FlatFileItemReader<logLine> customerItemReader() {
        FlatFileItemReader<logLine> reader = new FlatFileItemReader<>();

        reader.setResource(new ClassPathResource("/data/customer.log"));

        DefaultLineMapper<LogLine> customerLineMapper = new DefaultLineMapper<>();

        DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
        tokenizer.setNames(new String[] {"idOrder", "date", "tags"});

        customerLineMapper.setLineTokenizer(tokenizer);
        customerLineMapper.setFieldSetMapper(new CustomerFieldSetMapper());    
        reader.setLineMapper(customerLineMapper);

        return reader;
    }

如何在此項目閱讀器中添加過濾器以僅讀取包含 [{

沒有在項目處理器中完成工作

過濾應由處理者而非閱讀者負責。 您可以使用復合項目處理器並將“第一處理器”添加為“過濾”。

對於不包含'[{}]'的日志行,過濾處理器應返回null。

這些行將在下一個處理器和編寫器中自動忽略。

可以實現一個擴展 FlatFileItemReader 的自定義文件讀取器,其中分區號或過濾條件從配置傳入構造函數,並覆蓋 read() 方法 -> https://github.com/spring-projects/spring-batch/blob/main/spring-batch -基礎設施/src/main/java/org/springframework/batch/item/support/AbstractItemCountingItemStreamItemReader.java#L90

每個從屬步驟都將根據不同的構造函數參數進行實例化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM