如何跳过使用@BeforeStep注释的方法中抛出的异常

时间:2017-06-06 07:08:58

标签: spring-batch

我正在使用chunk Reader,Processor和Writer模式来处理我们的数据。我采用的方法是,在进入Reader的读取方法之前,我运行一个连接到db的sql并提取所有需要的数据。这是在使用@BeforeStep注释的方法中完成的,并且输出数据成为Reader的读取方法的源,该方法迭代生成的数据并为处理器检索每次读取的项目。使用@Retryable功能捕获并重试在流中引发的任何异常,并使用可跳过的异常功能跳过。

让我感到困惑的一件事是,捕获了使用@BeforeStep注释的方法中抛出的任何异常,并且应用程序抛出了一个自定义可跳过的异常,系统不会跳过该异常。这是期望的行为还是我错过了什么。请帮助我。

谢谢, raveendra

1 个答案:

答案 0 :(得分:0)

如果设计强制您从DB中提取数据,合理的解决方案是在主要数据之前创建一个步骤,并将代码从@BeforeStep移动到这个新步骤;您可以比监听器更好地管理可跳过异常和重试条件。

你可以看一下这个答案(Can we write a Spring Batch Job Without ItemReader and ItemWriter);在Tasklet#execute()中写下:

class MyTasklet implements Tasklet {
 @Override
 public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
  // Fetch data using JdbcTemplate (for example) and pull to external bean to let extracted data visible to next step
  return RepeatStatus.FINISHED;
 }
}

同时检查SO以便在步骤春季批次和#39;之间传递数据。了解更多信息