首页 > 解决方案 > 使用任何字段分隔符处理文本文件

问题描述

我需要在春季批处理中处理文件,并且文件分隔符可以更改。例如在第一个文件中,文件字段分隔符是逗号。并且当接收到具有文件字段分隔符选项卡的第二个文件时。如何在春季批处理中处理这种类型的文件?

标签: springspring-batch

解决方案


LineMapper您可以为每个步骤执行的Reader步骤级别范围定义 bean 。

LineMapper Bean

    @Bean("lineMapper")
    @StepScope
    public LineMapper<YourCustomRecordVo> lineMapper() {
        DefaultLineMapper<YourCustomRecordVo> lineMapper = new DefaultLineMapper<YourCustomRecordVo>();

        DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer("yourDelimiter");

        lineMapper.setLineTokenizer(lineTokenizer);
        //set fieldset mappers etc

        return lineMapper;
    }

读者豆

@Bean(name = "reader")
@StepScope
public YourCustomReader reader(){
    YourCustomReader  reader = new YourCustomReader();
    reader.setLineMapper(lineMapper());
    //set others necessary properties
    return reader;
}

在这里,将为每个步骤(即每个文件处理)创建两个reader& bean。lineMapper所以你可以根据不同的条件设置不同的分隔符。

更新

为了使用您的自定义分隔符,您可以将其设置为作业属性,例如

JobParametersBuilder paramsBuilder = new JobParametersBuilder();
paramsBuilder.addString("delimiter", "yourCustomDelimiter");

和午餐工作一样

jobLauncher.run(job, paramsBuilder.toJobParameters());

最后检索该作业参数(当前情况下的分隔符)为

    @Bean("lineMapper")
    @StepScope
    public LineMapper<YourCustomRecordVo> lineMapper(@Value("#{jobParameters['delimiter']}") String delimiter) {...}

推荐阅读