在检查记录是否在90天前创建的处理器中,如果读者读取了过时的记录,我想终止步骤,而不是作业。
我尝试了stepExecution.setStatus(),stepExecution.setEndTime(new Date()),等等。
任何人都可以建议直接明确地终止步骤吗? 感谢。
答案 0 :(得分:3)
据我所知,直接'停止步骤的方法并不存在
要终止步骤,您必须从null
返回ItemReader.read()
,这样当您处理旧对象时,您可以将标志设置为步执行上下文并将其用于:
null
以停止步骤执行如果知道更好的方式让我们知道! :)
答案 1 :(得分:1)
这可能不适合你的场景,但它是一个可能的选择。在spring批处理文档的5.3.3部分中,它描述了将stop元素添加到步骤中。您可以设置停止条件。因此,在您的示例中,您可以通过抛出异常来使作业失败。同样在停止元素定义中,您可以定义重启步骤,这可能是您处理的下一步。
由于开始,我不知道完美的解决方案 - >停止 - >开始但如果没有其他工作可以通过处理批量启动的外部脚本/应用程序进行管理。
我找到了一个替代我在这里所描述的可能有效的方法。我一直在测试它正在研究的东西,它似乎是一种失败的方法,并允许它继续其他的东西。
<step id="firststep" parent="fs" next="failDecision" />
<decision id="failDecision" decider="decider">
<next on="FAILED" to="secondstep" />
<next on="COMPLETED" to="thirdstep" />
</decision>
<step id="secondstep" parent="fs"/>
<step id="thirdstep" parent="fs"/>
在这种情况下,当我达到标准时,我在第一步失败了,它将进入秒步。当它成功完成时它将进入第三步,虽然我想你可以放弃第三步,如果你需要的话。