Java 如何使用Spring批处理存储整个读取行?

Java 如何使用Spring批处理存储整个读取行?,java,spring,spring-batch,Java,Spring,Spring Batch,我使用SpringBoot1.4和SpringBatch 1.4读入一个文件,当然,将数据解析到数据库中 我想做的是在映射字段之前将读取的整行存储在数据库中。整行将作为字符串存储在数据库中。这是为了审计目的,因此我不想从其组件重建行字符串 我们都看到了用于从分隔线获取数据的常用映射器: @Bean @StepScope public FlatFileItemReader<Claim> claimFileReader(@Value("#{jobParameters[fileName]}

我使用SpringBoot1.4和SpringBatch 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;
}
@Bean
@步进镜
公共FlatFileItemReader claimFileReader(@Value(“#{jobParameters[fileName]}”)字符串路径文件){
debug(“为索赔设置FlatFileItemReader”);
debug(“输入文件名的作业参数:”+pathToFile);
FlatFileItemReader=新的FlatFileItemReader();
setResource(新文件系统资源(pathToFile));
reader.setLineMapper(claimLineMapper());
debug(“已完成为索赔设置FlatFileItemReader”);
返回读取器;
}
@豆子
公共线条映射器claimLineMapper(){
调试(“设置线路映射器”);
DefaultLineMapper lineMapper=新的DefaultLineMapper();
DelimitedLineTokenizer lineTokenizer=新的DelimitedLineTokenizer();
lineTokenizer.setDelimiter(“|”);
lineTokenizer.setStrict(false);
lineTokenizer.setNames(新字符串[]{“RX\U编号”、“服务\U DT”、“索赔\U STS”、“处理器\U索赔\U ID”、“运营商\U ID”、“组\U ID”、“成员唯一\U ID”});
BeanRapperFieldSetMapper=新的BeanRapperFieldSetMapper();
fieldSetMapper.setTargetType(Claim.class);
lineMapper.setLineTokenizer(lineTokenizer);
lineMapper.setFieldSetMapper(claimFieldSetMapper());
logger.debug(“已完成lineMapper设置”);
返回线映射器;
}
如果这是我的行: 463832 | 20160101 |已付| 50441900000 | XYZ |黄金计划| 561868

我希望将“463832 | 20160101 |已付| 50441900000 | HBT | GOLD PLAN | 561868”存储为数据库中的字符串(可能还包含一些附加数据,例如作业实例id)


有没有关于如何在文件读取过程中将其挂接的想法?

您可以使用一个新类(建议使用
CustomLineMapper
),而不是使用
DefaultLineMapper
),如下所示

公共类CustomLineMapper扩展了DefaultLineMapper{
@凌驾
公共声明映射行(字符串行,整数行号)引发异常{
//在这里,您可以处理*行内容*
返回super.mapLine(行、行号);
}
}
line对象将包含映射到对象之前的原始数据

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);
    }
}