我有一个ItemProcessor
,它从CSV文件中读取数据。
然后,我有一个ItemWriter
,可以从这些数据中构建新对象并将这些新对象保存到数据库中。
工作开始时,我正在创建一个具有以下属性的BatchExecution
对象:
public class BatchExecution
{
private Long id;
private LocalDateTime startDate;
private BatchStatusEnum status;
}
我需要做的是计算这些新对象的总数并定义一个阈值。
someNextStep
。BatchExecution
对象的状态设置为BatchStatusEnum .VALIDATION_ERROR"
。我创建了一个ThresholdValidationException
,当我的对象总数小于阈值时抛出该异常,并按如下所示将我的作家设置为faultTolerant
.writer(writer)
.faultTolerant()
.skip(ValidationException.class)
.skipLimit(0)
.build();
private void validateThreshold(long totalCount, long thresholdValue, BatchExecution currentBatch) throws ValidationException {
if(totalCount) < thresholdValue {
currentBatch.setStatus(BatchStatusEnum.VALIDATION_ERROR);
batchExecutionRepository.saveAndFlush(currentBatch);
throw new ValidationException(("Error - threshold not reached"));
}
}
抛出ValidationException
时,作业失败,但状态未设置为VALIDATION_ERROR
。
所以我尝试使用这样的条件:
.on("FAILED")
.end()
.on("COMPLETED")
.to(nextStep)
但结果相同。
我有很多关于如何使用spring batch处理异常的问题:
Skip Policy
仅用于自定义将导致作业失败的异常吗?Error Step
来处理所有异常和错误吗?如果是这样,这是处理异常的正确方法吗?谢谢。
编辑:刚刚在onWriteError
上找到一个链接。似乎是实现我正在尝试做的一种方式