Spring Batch-创建失败步骤?

时间:2020-09-15 09:21:38

标签: spring-batch

我有一个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处理异常的问题:

  1. Skip Policy仅用于自定义将导致作业失败的异常吗?
  2. 我可以创建一个Error Step来处理所有异常和错误吗?如果是这样,这是处理异常的正确方法吗?
  3. 为什么我的批次状态没有更新到数据库中?

谢谢。

编辑:刚刚在onWriteError上找到一个链接。似乎是实现我正在尝试做的一种方式

0 个答案:

没有答案
相关问题