Spring RowMapper 出现批处理问题?
Spring Batch to Handle Issues arises at RowMapper?
在 Spring Batch
代码中,我从 Oracle DB
读取数据并将数据加载到 Postgres DB
。 table PATIENT_VISIT
将 VisitId
作为 varchar
并且仅存储 Integer
值。将数据加载到 Postgres
时,我想将数据类型更改为 Integer
。在 Stage env 上,在 millions
条记录中,只找到一条垃圾记录,它包含 A12345
和 VisitId
之类的字母数字值,在阅读时我想跳过它,我在下面的代码中实现了它.
代码在 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)
.
来处理它们
在 Spring Batch
代码中,我从 Oracle DB
读取数据并将数据加载到 Postgres DB
。 table PATIENT_VISIT
将 VisitId
作为 varchar
并且仅存储 Integer
值。将数据加载到 Postgres
时,我想将数据类型更改为 Integer
。在 Stage env 上,在 millions
条记录中,只找到一条垃圾记录,它包含 A12345
和 VisitId
之类的字母数字值,在阅读时我想跳过它,我在下面的代码中实现了它.
代码在 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)
.