gpt4 book ai didi

java - 如何使用 Spring Batch 存储整个读取行?

转载 作者:行者123 更新时间:2023-11-29 04:40:50 27 4
gpt4 key购买 nike

我正在使用 Spring Boot 1.4 和 Spring Batch 1.4 读取文件,当然还要将数据解析到数据库中。

我想做的是在映射字段之前将读取的整行存储在数据库中。整行将作为字符串存储在数据库中。这是出于审计目的,因此我不想从其组件重建行字符串。

我们都见过用于从定界行获取数据的常用映射器:

@Bean
@StepScope
public FlatFileItemReader<Claim> claimFileReader(@Value("#{jobParameters[fileName]}") String pathToFile) {
logger.debug("Setting up FlatFileItemReader for claim");
logger.debug("Job Parameter for input filename: " + pathToFile);

FlatFileItemReader<Claim> reader = new FlatFileItemReader<Claim>();
reader.setResource(new FileSystemResource(pathToFile));
reader.setLineMapper(claimLineMapper());
logger.debug("Finished setting up FlatFileItemReader for claim");
return reader;
}

@Bean
public LineMapper<Claim> claimLineMapper() {
logger.debug("Setting up lineMapper");

DefaultLineMapper<Claim> lineMapper = new DefaultLineMapper<Claim>();

DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
lineTokenizer.setDelimiter("|");
lineTokenizer.setStrict(false);
lineTokenizer.setNames(new String[] { "RX_NUMBER", "SERVICE_DT", "CLAIM_STS", "PROCESSOR_CLAIM_ID", "CARRIER_ID", "GROUP_ID", "MEM_UNIQUE_ID" });

BeanWrapperFieldSetMapper<Claim> fieldSetMapper = new BeanWrapperFieldSetMapper<Claim>();
fieldSetMapper.setTargetType(Claim.class);

lineMapper.setLineTokenizer(lineTokenizer);
lineMapper.setFieldSetMapper(claimFieldSetMapper());

logger.debug("Finished Setting up lineMapper");

return lineMapper;
}

如果这是我的行:463832|20160101|付费|504419000000|XYZ|黄金计划|561868

我想将“463832|20160101|PAID|504419000000|HBT|GOLD PLAN|561868”作为字符串存储在数据库中(可能还有一些额外的数据,例如 job_instance_id)。

关于如何在文件读取过程中 Hook 它的任何想法?

最佳答案

除了使用DefaultLineMapper,你可以有一个新类(建议CustomLineMapper)如下

public class CustomLineMapper extends DefaultLineMapper<Claim> {

@Override
public Claim mapLine(String line, int lineNumber) throws Exception {
// here you can handle *line content*
return super.mapLine(line, lineNumber);
}
}

line 对象将包含在将其映射到对象之前的原始数据。

关于java - 如何使用 Spring Batch 存储整个读取行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260601/

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