Spring批量过滤项目阅读器内的数据

时间:2018-03-30 19:04:45

标签: java spring-batch

我正在编写一个读取日志文件的批处理,这些日志文件应该采用多种类型(日志日志文件的格式)然后我想根据日志文件中的某些字符读取每个文件,例如

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

在这样的日志文件中,我想只读取包含&#39;的日志行。 [{}]&#39;并忽略所有其他人。我试图在项目阅读器中阅读并将其拆分为对象,但我无法弄清楚如何。我认为我应该创建一个自定义项目阅读器或类似的东西;我的Logline类看起来太简单了:

  
    

public class logLine {

  
     

String idOrder;

     

字符串时间;

     

字符串标签;

     

}

和我的项目阅读器看起来像:

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;
    }

如何在此项目阅读器中添加过滤器以仅读取包含[{

没有完成工作  项目处理器

1 个答案:

答案 0 :(得分:0)

过滤应该是处理器而不是读者的责任。您可以使用复合项目处理器并将第一个处理器添加为筛选。

对于不包含&#39;的日志行,过滤处理器应返回null。 [{}]&#39;

这些行将在下一个处理器和编写器中自动忽略。

相关问题