我的批处理作业读取、处理和写入 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
过滤掉所有块的所有记录,是否有一个选项可以跳过。