【发布时间】:2021-04-19 23:35:30
【问题描述】:
一旦由于数据库上的死锁异常而失败,我很难让我的 StoredProcedureItemReader 重试。
这是我的步骤过程的配置:
@Bean
public Step Step() throws Exception {
return stepBuilderFactory.get("Step")
.<Student, Student>chunk(100)
.reader(storedProcItemReader())
.processor(studentItemProcessor)
.writer(fileItemWriter())
.faultTolerant()
.retryLimit(5)
.retry(myException.class)
.backOffPolicy(backoffPolicy())
.build();
}
@Bean
@StepScope
public StoredProcedureItemReader<Student> storedProcItemReader() throws Exception {
return studentItemReader.getDataFromDatabase(dataSource);
}
studentItemReader 类文件:
@Component
@StepScope
public class studentItemReader{
@Retryable(include = {DataAccessException.class, JDBCException.class, TransactionException.class, DeadlockLoserDataAccessException.class, Exception.class }, maxAttempts = 5, backoff = @Backoff(delay = 1000,
maxDelay = 15000, multiplier = 2))
public StoredProcedureItemReader<Student> getDataFromDatabase(DataSource dataSource) {
StoredProcedureItemReader<RegionResponse> reader = new StoredProcedureItemReader<>();
SqlParameter[] parameter = { new SqlParameter("@studentId",
java.sql.Types.INTEGER) };
PreparedStatementSetter statementValues = new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(1, parameterValue);
}
};
reader.setDataSource(dataSource);
reader.setProcedureName("dbo.StudentReport");
reader.setParameters(parameter);
reader.setPreparedStatementSetter(statementValues);
reader.setRowMapper(new StudentRowMapper());
return reader;
}
}
}
所以,问题是在我的 StoredProcedureItemReader 上添加 Retry 后,我无法让 Retry 片段工作。请让我在这里做错了什么。提前致谢!
【问题讨论】:
标签: spring spring-batch batch-processing