我正在使用chunk Reader,Processor和Writer模式来处理我们的数据。我采用的方法是,在进入Reader的读取方法之前,我运行一个连接到db的sql并提取所有需要的数据。这是在使用@BeforeStep注释的方法中完成的,并且输出数据成为Reader的读取方法的源,该方法迭代生成的数据并为处理器检索每次读取的项目。使用@Retryable功能捕获并重试在流中引发的任何异常,并使用可跳过的异常功能跳过。
让我感到困惑的一件事是,捕获了使用@BeforeStep注释的方法中抛出的任何异常,并且应用程序抛出了一个自定义可跳过的异常,系统不会跳过该异常。这是期望的行为还是我错过了什么。请帮助我。
谢谢, raveendra
答案 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;之间传递数据。了解更多信息