使用任何字段分隔符

时间:2018-06-08 05:25:40

标签: spring spring-batch

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

1 个答案:

答案 0 :(得分:1)

您可以为步骤级范围的LineMapperReader定义bean,该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;
    }

Reader Bean

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

此处reader和&amp;将为每个步骤创建lineMapper个bean(即每个文件处理)。因此,您可以根据不同的条件设置不同的分隔符。

更新

要使用自定义分隔符,可以将其设置为

等作业属性
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) {...}