簡體   English   中英

如何使用Spring Batch存儲整個讀取行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM