0

我的批处理作业读取、处理和写入 DB 。ItemProcessor返回至少一项时,作业运行良好。如果它返回 null ,则ItemWriter @AfterStep抛出无法调用方法。

这是代码

public class BlockItemWriter implements ItemWriter<Block> {

@Override
public void write<List<? extends Block> items) throws Exception {
//do something
}

@BeforeStep
public void beforeStepExec(StepExecution stepExecution){
    this.stepExecution = stepExecution; }
    
@AfterStep
public void afterStepExec(StepExecution stepExecution){
    //Access step execution context
    //do something}
}

下面的工作项处理器

public class BlockItemProcessor implements ItemProcessor<Block> {

@Override
public Block process(Block item) throws Exception {
return item;
}

@BeforeStep
public void beforeStepExec(StepExecution stepExecution){
    this.stepExecution = stepExecution; }

}

以下 ItemProcessor 代码在 ItemWritter @Afterstep 中引发异常

public class BlockItemProcessor implements ItemProcessor<Block> {

@Override
public Block process(Block item) throws Exception {
return null;
}

@BeforeStep
public void beforeStepExec(StepExecution stepExecution){
    this.stepExecution = stepExecution; }

}

为什么我用 null 进行测试?处理器有过滤条件。它是 - 在 ItemProcessor 案例测试中通过过滤跳过所有项目。实际场景中,100个item中,即使1个item没有被过滤掉,也不会抛出异常。只有在处理器中过滤了所有 100 个项目时,才会发生异常。

ItemWriter如果ItemProcessor过滤掉所有块的所有记录,是否有一个选项可以跳过。

4

0 回答 0