[英]How do I store the whole read line using Spring Batch?
我使用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 | PAID | 504419000000 | XYZ | GOLD PLAN | 561868
我想將“463832 | 20160101 | PAID | 504419000000 | HBT | GOLD PLAN | 561868”存儲為數據庫中的字符串(可能還有一些其他數據,如job_instance_id)。
有關如何在文件讀取過程中將其掛鈎的任何想法?
您可以使用如下所示的新類(建議CustomLineMapper
),而不是使用DefaultLineMapper
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對象將包含在將其映射到對象之前的原始數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.