Spring RowMapper 出现批处理问题?

Spring Batch to Handle Issues arises at RowMapper?

Spring Batch 代码中,我从 Oracle DB 读取数据并将数据加载到 Postgres DB。 table PATIENT_VISITVisitId 作为 varchar 并且仅存储 Integer 值。将数据加载到 Postgres 时,我想将数据类型更改为 Integer。在 Stage env 上,在 millions 条记录中,只找到一条垃圾记录,它包含 A12345VisitId 之类的字母数字值,在阅读时我想跳过它,我在下面的代码中实现了它.

代码在 PatientVisitRowMapper 的第 3 行中断,其中 aphaNumric 值无法设置为整数并生成错误无法转换为内部表示。如何处理?

public class PatientVisitRowMapper implements RowMapper<PatientVisit> {

    @Override
    public PatientVisit mapRow(ResultSet rs, int rowNum) throws SQLException {
        PatientVisit patientVisit = new PatientVisit();
        patientVisit.setId(rs.getString("id"));
        patientVisit.setName(rs.getString("name"));
        patientVisit.setVisitId(rs.getInt("patientVisitId"));   //Line-3, unable to map alphaNumeric into String and hence exception        
        ........
        .........
        ........
        return patientVisit;
    }
}

代码

@Bean("readPatientVisitJob")
@Primary
public Job readPatientVisitJob() {
    return jobBuilderFactory.get("readPatientVisitJob")
            .incrementer(new RunIdIncrementer())
            .start(PatientVisitStepOne())
            .listener(PatientVisitJobListener())
            .build();
}

@Bean
public Step PatientVisitStepOne() {
    return stepBuilderFactory.get("PatientVisitStepOne")
            .<PatientVisit, PatientVisit>chunk(5000)
            .reader(PatientVisitReader())
            .processor(PatientVisitProcessor())
            .writer(PatientVisitWriter())
            .faultTolerant()
            .skip(NullPointerException.class)
            .skipLimit(10)
            .build();
}

您要么在行映射器实现中处理这些错误,要么让它们冒泡并由 reader 抛出。

如果您决定让它们冒泡,您可以将异常类型声明为可跳过的,并且您可以使用 org.springframework.batch.core.SkipListener#onSkipInRead(Throwable t).

来处理它们