我在Spring Batch中设置了一个有点线性的工作,包括几个步骤 . 如果在任何时候,单个步骤失败,则该作业将失败 .
这些步骤包括许多tasklet,然后是基于块的步骤 . 即:
-
第1步
-
Tasklet 1
-
第2步
-
Tasklet 2
-
第3步
-
读者
-
处理器
-
作家
如果出现问题,显而易见的事情就是抛出异常 . Spring Batch将处理此事并记录所有内容 . 这种行为,特别是打印堆栈跟踪,是不可取的,如果可以在状态设置为 FAILED
的情况下正常结束作业,则会更好 .
Tasklets目前直接在 StepContribution
上设置 ExitStatus
. 它们也是使用流程构建的(这不是理想的,但步骤继续不受阻碍) . 然后可以在Tasklet中直接处理这些问题 .
但是,我们无法访问基于块的方法中的 StepContribution
. 我们只有 StepExecution
. 在这里使用 setExitStatus
什么都不做 .
我们使用的是构建器( JobBuilerFactory
和 StepBuilderFactory
),而不是XML设置 .
潜在的解决方案:
-
告诉或配置Batch如何处理异常(不打印堆栈跟踪) .
-
在侦听器中捕获异常 . 不幸的是,Spring Batch在到达
@AfterStep
时已经捕获到异常 . -
告诉步骤/作业我们不想继续(例如在执行上下文中设置值或者
StepContribution
的替代值 .
1 回答
我想你可以探索以下两个选项 .
Option 1 : 您可以使用
noSkip
Exception .这显着地防止了某些异常(和子类)被跳过抛出一些您想要使作业失败的特定异常 .
这是你如何配置帽子
****选项2 **:**您可以使用将退出状态设置为 FAILED ,以便在步骤完成后输入错误流程
希望这可以帮助