gpt4 book ai didi

java - 如何在文件读取过程中动态映射 Spring Batch 中的字段集?

转载 作者:行者123 更新时间:2023-12-02 08:50:44 26 4
gpt4 key购买 nike

我需要在 Spring Batch 的帮助下读取文件。但在阅读时需要 LineMapper 。如果文件的列类型不匹配,则会出现错误

我想动态执行此操作或跳过该步骤,我该怎么做?

        DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
lineTokenizer.setNames(new String[] { "col1", "col2", "col3", "col4", "col5" });
lineTokenizer.setDelimiter(",");
BeanWrapperFieldSetMapper<InputStream> fieldSetMapper = new BeanWrapperFieldSetMapper<InputStream>();
fieldSetMapper.setTargetType(InputStream.class);
fieldSetMapper.setStrict(false);
DefaultLineMapper<InputStream> lineMapper = new DefaultLineMapper<InputStream>();
lineMapper.setLineTokenizer(lineTokenizer);
lineMapper.setFieldSetMapper(fieldSetMapper);
setLineMapper(lineMapper);

我想要的另一件事

我正在使用 FlatFileItemreader 来读取文件。该文件可能是 csv、xml、txt 格式。我希望 Spring Batch Reader 能够动态识别文件格式并进行相应的处理。我们可以这样做吗

最佳答案

您的问题可能与现有的问题相关 multiple-files-of-different-data-structure-formats-as-input-in-spring-batch 。 Spring Batch 不提供开箱即用的通用 ItemReader 来支持同时读取不同类型的格式。可以使用 MultiResourceItemReader,如 Spring Batch 文档中所述 multi file input reader但仅适用于具有相同格式的输入文件。在您的情况下,您必须根据您拥有的输入文件格式来决定要使用哪种阅读器。例如,您可以尝试在作业配置类中创建您自己的 ItemReader 与此类似的内容

    @Bean
@StepScope
public ItemReader<YourDomainClass> itemReader(
@Value("#{jobParameters}") Resource inputFile) {

//your logic here
String fileName = inputFile.getFilename();
if (isCsv(inputFile)) {
return csvItemReader(inputFile);
} else if(isXml(inputFile)){
return xmlItemReader(inputFile);
} else {
...
}
}

//CSV ItemReader
public FlatFileItemReader<YourDomainClass> csvItemReader(Resource inputFile) {

return new FlatFileItemReaderBuilder<YourDomainClass>()
.name("csvItemReader")
.delimited()
.names(new String[] {"col1", "col2", "col3", "col4", "col5"})
.targetType(YourDomainClass.class)
.resource(inputFile)
.build();
}

//XML ItemReader
public ItemReader<YourDomainClass> xmlItemReader(Resource inputFile) {

...
}

//JSON ItemReader
public ItemReader<YourDomainClass> jsonItemReader(Resource inputFile) {

...
}

希望对您有帮助。

关于java - 如何在文件读取过程中动态映射 Spring Batch 中的字段集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60796582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com