我需要在spring批处理中处理文件,文件分隔符可以更改。例如,在第一个文件中,文件字段分隔符是逗号。当收到第二个文件时,它有文件字段分隔符选项卡..如何在春季批处理这种类型的文件?
答案 0 :(得分:1)
您可以为步骤级范围的LineMapper
和Reader
定义bean,该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
和&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) {...}