据我所知,如果没有更多的项目需要阅读,读者应该返回'null',表示“读取结束”。如果这是读者的合同,我认为框架会理解这个'null'并且不会调用ReadListener的'afterRead'。但是,它似乎是用'null'参数调用'afterRead'。
我们正在使用弹簧批次2.1.7。如果这是预期的行为或者我在这里缺少某些东西,请告诉我们。
以下是我们的工作配置:
<batch:job id="job">
<batch:listeners>
<batch:listener ref="jobExecutionListener"></batch:listener>
</batch:listeners>
<batch:step id="myStep">
<batch:tasklet>
<batch:listeners>
<batch:listener ref="myReadListener" />
<batch:listener ref="myTransformerListener" />
<batch:listener ref="myWriteListener" />
</batch:listeners>
<batch:chunk reader="myReader" processor="myTransformer"
writer="myWriter" commit-interval="1000" />
</batch:tasklet>
</batch:step>
</batch:job>
答案 0 :(得分:1)
据我记忆,这是正确的。 Null是结束值,但它是读取值。
因此,afterReading以null执行,您的代码必须处理此问题。