2016-08-31 11 views
1

私は、ファイルを読み込み、もちろんデータベースにデータを解析するために、Spring Boot 1.4とSpring Batch 1.4を使用しています。Springバッチを使用してリード線全体を保存するにはどうすればよいですか?

私がしたいのは、フィールドがマップされる前に、データベースに読み込まれた行全体を保存することです。行全体が文字列としてデータベースに格納されます。これは監査目的のためです。そのため、コンポーネントから行文字列を再構築する必要はありません。 20160101 | |有料| 504419000000 | XYZ | GOLDプラン| 561868 463832:これは私の行である場合

@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 | HBT | GOLD PLAN | 561868"をデータベースの文字列として保存したいとします(おそらく、job_instance_idなどの追加データを使用します)。

ファイルの読み取りプロセス中にこれをフックする方法に関するアイデアはありますか?代わりにDefaultLineMapperを使用しての

答えて

1

は、あなたが新しいクラスを持つことができます

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

ラインオブジェクトの意志をオブジェクトにマッピングする前にある生データが含まれている以下のように(CustomLineMapperを示唆)。

関連する問題